【发布时间】:2020-09-26 09:30:43
【问题描述】:
我需要将 SPSS (*.sav) 文件变量名称、标签和属性(非数据值)转换为 R 中的 *.txt / *.csv。R 中的首选结构(用于导出)是数据。这种形式的框架,见下例:
> new.label.dataframe
VARIABLE.NAME ATTRIBUTE LABEL
STATUS 1 Complete
STATUS 2 Screen out Q1
STATUS 3 Screen out Q5
SAMPLE 1 Kunín + Hollandia (včetně černobílých)
SAMPLE 2 Mlýn + Krajina
...etc.
Q2_1 NA dobré složení
Q2_1 NA Žádné konzervanty
Q2_1 NA lahodný
...etc.
在使用 Have() 将数据导入 R 后,我使用 R 库 sjlabelled() 来提取标签:
library(haven)
mydata <- read_sav("DATA_FINAL.sav", encoding = NULL, user_na = FALSE)
library(sjlabelled)
lab <- get_labels(mydata, values=T):
str(lab)
> str(lab)
List of 762
$ ID : NULL
$ STATUS : Named chr [1:3] "Complete" "Screen out Q1" "Screen out Q5"
..- attr(*, "names")= chr [1:3] "1" "2" "3"
$ SAMPLE : Named chr [1:2] "Kunín + Hollandia (včetně černobílých)" "Mlýn + Krajina"
..- attr(*, "names")= chr [1:2] "1" "2"
$ ORDER : Named chr [1:2] "Kunín ==> Hollandia || Mlýn ==> Krajina" "Hollandia ==> Kunín || Krajina ==> Mlýn"
..- attr(*, "names")= chr [1:2] "1" "2"
$ Q1 : Named chr [1:6] "5x týdně nebo častěji" "1x – 4x týdně" "1x za dva týdny" "1x za měsíc" ...
..- attr(*, "names")= chr [1:6] "1" "2" "3" "4" ...
$ Q2_1 : chr [1:473] "dobré složení" "Žádné konzervanty" "lahodný" "Husty" ...
$ Q2_2 : chr [1:431] "prává chuť" "Žádné Přidatné látky" "vláčný" "Chutny" ...
$ Q2_3 : chr [1:311] "" "Žádná Zahušťovadla" "konzistentní" "Ovocny" ...
head(lab, 6)
> head(lab, 6)
$ID
NULL
$STATUS
1 2 3
"Complete" "Screen out Q1" "Screen out Q5"
$SAMPLE
1 2
"Kunín + Hollandia (včetně černobílých)" "Mlýn + Krajina"
$ORDER
1 2
"Kunín ==> Hollandia || Mlýn ==> Krajina" "Hollandia ==> Kunín || Krajina ==> Mlýn"
$Q1
1 2 3 4 5 6
"5x týdně nebo častěji" "1x – 4x týdně" "1x za dva týdny" "1x za měsíc" "1x za čtvrt roku" "Méně často"
$Q2_1
[1] "dobré složení" "Žádné konzervanty"
[3] "lahodný" "Husty"
[5] "Krémový" ""
[7] "Musi mi chutnat" "hustý"
[9] "Chutny" "Hustý"
[11] "vysoké procento tuku" "krémový"
“实验室”的类是一个列表:
> class(lab)
[1] "list"
请注意,变量 Q2_1 只有标签(“dobre slozeni”等),但没有属性(1,2,3...)。 提取变量名、属性和标签的向量非常容易:
my.vars <- names(lab)
my.atts <- unlist(lapply(lab, attributes))
my.labs <- unlist(unname(lab))
...但它们的长度确实不同:
> length(my.vars)
[1] 762
> length(my.atts)
[1] 1734
> length(my.labs)
[1] 4775
我能得到的最好的结果如下 - 但是不是很方便:
> lab.u <- data.frame(unlist(lab))
> head(lab.u, 20)
unlist.lab.
STATUS.1 Complete
STATUS.2 Screen out Q1
STATUS.3 Screen out Q5
SAMPLE.1 Kunín + Hollandia (včetně černobílých)
SAMPLE.2 Mlýn + Krajina
ORDER.1 Kunín ==> Hollandia || Mlýn ==> Krajina
ORDER.2 Hollandia ==> Kunín || Krajina ==> Mlýn
Q1.1 5x týdně nebo častěji
Q1.2 1x – 4x týdně
Q1.3 1x za dva týdny
Q2_11 dobré složení
Q2_12 Žádné konzervanty
Q2_13 lahodný
请问,在此消息的开头有任何将“实验室”转换为上述结构的提示吗? 非常感谢! 兹德内克·斯卡拉
【问题讨论】: