library(rio)
library(haven)
Formats SAS, SPSS, and Stata use haven
as import and export functions. And these formats can have the so-called labelled data. For more information, please read vignette("semantics", "haven")
. Here, we provide a quick guide on how to work with labelled data using rio
.
You can use haven::labelled()
to create labelled data.
haven::labelled(
gender <-c("M", "F", "F", "F", "M"),
c(Male = "M", Female = "F"))
Or directly using attrs
sample(1:5)
rating <-attr(rating, "labels") <- c(c(Good = 1, Bad = 5))
data.frame(gender, rating) mydata <-
Round trip: The data labels are retained. But they are at the variable level.
export(mydata, "mydata.sav")
rio::import("mydata.sav")
restored_data <-str(restored_data)
#> 'data.frame': 5 obs. of 2 variables:
#> $ gender: chr "M" "F" "F" "F" ...
#> ..- attr(*, "format.spss")= chr "A1"
#> ..- attr(*, "labels")= Named chr [1:2] "M" "F"
#> .. ..- attr(*, "names")= chr [1:2] "Male" "Female"
#> $ rating: num 5 3 1 2 4
#> ..- attr(*, "format.spss")= chr "F8.0"
#> ..- attr(*, "labels")= Named num [1:2] 1 5
#> .. ..- attr(*, "names")= chr [1:2] "Good" "Bad"
rio::gather_attrs()
converts attributes to the data.frame level
rio::gather_attrs(restored_data)
g <-str(g)
#> 'data.frame': 5 obs. of 2 variables:
#> $ gender: chr "M" "F" "F" "F" ...
#> ..- attr(*, "labels")= Named chr [1:2] "M" "F"
#> .. ..- attr(*, "names")= chr [1:2] "Male" "Female"
#> $ rating: num 5 3 1 2 4
#> ..- attr(*, "labels")= Named num [1:2] 1 5
#> .. ..- attr(*, "names")= chr [1:2] "Good" "Bad"
#> - attr(*, "format.spss")=List of 2
#> ..$ gender: chr "A1"
#> ..$ rating: chr "F8.0"
#> - attr(*, "labels")=List of 2
#> ..$ gender: Named chr [1:2] "M" "F"
#> .. ..- attr(*, "names")= chr [1:2] "Male" "Female"
#> ..$ rating: Named num [1:2] 1 5
#> .. ..- attr(*, "names")= chr [1:2] "Good" "Bad"
attr(g, "labels")
#> $gender
#> Male Female
#> "M" "F"
#>
#> $rating
#> Good Bad
#> 1 5