Jest to jedna z innowacji podjętych w rio (pełne ujawnienie: napisałem ten pakiet). Zasadniczo zapewnia różne sposoby importowania etykiet zmiennych, w tym sposób działania rzeczy zagranicznych i zagranicznych. Oto banalny przykład:
start dokonując powtarzalne przykład:
> library("rio")
> export(iris, "iris.dta")
importu przy użyciu foreign::read.dta()
(przez rio::import()
):
> str(import("iris.dta", haven = FALSE))
'data.frame': 150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
- attr(*, "datalabel")= chr ""
- attr(*, "time.stamp")= chr "15 Jan 2016 20:05"
- attr(*, "formats")= chr "" "" "" "" ...
- attr(*, "types")= int 255 255 255 255 253
- attr(*, "val.labels")= chr "" "" "" "" ...
- attr(*, "var.labels")= chr "" "" "" "" ...
- attr(*, "version")= int -7
- attr(*, "label.table")=List of 1
..$ Species: Named int 1 2 3
.. ..- attr(*, "names")= chr "setosa" "versicolor" "virginica"
odczytywane za pomocą haven::read_dta()
używając jego zmienną natywne atrybuty ponieważ atrybutów są przechowywane na poziomie data.frame zamiast na poziomie zmiennej:
> str(import("iris.dta", haven = TRUE, column.labels = TRUE))
'data.frame': 150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species :Class 'labelled' atomic [1:150] 1 1 1 1 1 1 1 1 1 1 ...
.. ..- attr(*, "labels")= Named int [1:3] 1 2 3
.. .. ..- attr(*, "names")= chr [1:3] "setosa" "versicolor" "virginica"
Czytaj w użyciu haven::read_dta()
użyciu alternatywę, że my (twórcy rio) znaleziony wygodniejsze:
> str(import("iris.dta", haven = TRUE))
'data.frame': 150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
- attr(*, "var.labels")=List of 5
..$ Sepal.Length: NULL
..$ Sepal.Width : NULL
..$ Petal.Length: NULL
..$ Petal.Width : NULL
..$ Species : NULL
- attr(*, "label.table")=List of 5
..$ Sepal.Length: NULL
..$ Sepal.Width : NULL
..$ Petal.Length: NULL
..$ Petal.Width : NULL
..$ Species : Named int 1 2 3
.. ..- attr(*, "names")= chr "setosa" "versicolor" "virginica"
Przesuwając atrybuty być na poziomie data.frame, są one znacznie łatwiejsze uzyskać dostęp za pomocą attr(data, "label.var")
itd. zamiast przekopywania się przez atrybuty każdej zmiennej.
Uwaga: wartości atrybutów będą NULL, ponieważ właśnie piszę natywny zestaw danych R do lokalnego pliku, aby uczynić to powtarzalnym.
Można stworzyć coś w rodzaju stołu dopasowania, na przykład'lbs <- setNames (_labels_, names (df))'; następnie dostęp do etykiety można uzyskać za pomocą np. 'lbs [" var "]' – MichaelChirico
Różni autorzy pakietów zaimplementowali to inaczej. Standardem _de_facto_ R byłaby funkcja 'read.dta' w pkg: foreign. 'haven' jest relatywnie nowym pakietem iw tej chwili nie ma udokumentowanych planów etykiet. –
@ 42- 'read_dta' w' haven' ma etykietę. Natomiast 'foreign :: read.dta' tak naprawdę nie. Ponadto pakiety 'foreign' nie działają z Statą 13, nie mówiąc już o 14. – Heisenberg