R - 使用避风港包中的 read_sav 后订购数据框时的丢失标签
R - Loss labels when I ordered a data frame after using read_sav from haven package
我使用 haven
包中的 read_sav
函数导入 SPSS 文件。因此我有列名和关联标签 (class labelled
).
我在订购数据框时丢失了标签。我可以避免在订购前转换因子的问题,但这是错误还是正常行为?
这是一个简单的例子。
DataForExample <- structure(list(CollectorNm = structure(c("Email Invitation 8",
"Email Invitation 8", "Email Invitation 8", "Email Invitation 8",
"Email Invitation 8", "Email Invitation 8"), label = "CollectorNm"),
q0001 = structure(c(1, 1, 1, 1, 1, 1), label = "Avez-vous déjà suivi la formation Atlas-Vente des 18 et 19 octobre ?", class = "labelled", labels = structure(c(1,
2), .Names = c("Oui, j'ai bien suivi cette formation.", "Non, je n'y ai pas participé."
))), q0002_0001 = structure(c(3, 3, 3, 2, 3, 3), label = "La formation dans son ensemble", class = "labelled", labels = structure(c(1,
2, 3, 4), .Names = c("pas du tout satisfait", "plutôt pas satisfait",
"plutôt satisfait", "très satisfait")))), .Names = c("CollectorNm",
"q0001", "q0002_0001"), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -6L))
View(DataForExample) # OK
Toto <- DataForExample[order(DataForExample$q0001_0001),]
View(Toto) # NOK : the labels disappeared
谢谢
您需要加载支持 class labelled
子集操作的包。最好在 haven
之后加载它。至少有两个包具有这样的支持:Hmisc
和 expss
。免责声明:我是 expss 包的作者。
更新。 修复标记为 class。
似乎 haven
没有为所有带标签的变量设置 labelled
class。所以我们需要修复它:
library(expss)
for(each in colnames(DataForExample)){
if(!("labelled" %in% class(DataForExample[[each]])) &&
(!is.null(var_lab(DataForExample[[each]])) ||
!is.null(val_lab(DataForExample[[each]]))
)) {
class(DataForExample[[each]]) = union("labelled", class(DataForExample[[each]]))
}
}
View(DataForExample) # OK
Toto <- DataForExample[order(DataForExample$q0001),]
View(Toto) # OK
我使用 haven
包中的 read_sav
函数导入 SPSS 文件。因此我有列名和关联标签 (class labelled
).
我在订购数据框时丢失了标签。我可以避免在订购前转换因子的问题,但这是错误还是正常行为?
这是一个简单的例子。
DataForExample <- structure(list(CollectorNm = structure(c("Email Invitation 8",
"Email Invitation 8", "Email Invitation 8", "Email Invitation 8",
"Email Invitation 8", "Email Invitation 8"), label = "CollectorNm"),
q0001 = structure(c(1, 1, 1, 1, 1, 1), label = "Avez-vous déjà suivi la formation Atlas-Vente des 18 et 19 octobre ?", class = "labelled", labels = structure(c(1,
2), .Names = c("Oui, j'ai bien suivi cette formation.", "Non, je n'y ai pas participé."
))), q0002_0001 = structure(c(3, 3, 3, 2, 3, 3), label = "La formation dans son ensemble", class = "labelled", labels = structure(c(1,
2, 3, 4), .Names = c("pas du tout satisfait", "plutôt pas satisfait",
"plutôt satisfait", "très satisfait")))), .Names = c("CollectorNm",
"q0001", "q0002_0001"), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -6L))
View(DataForExample) # OK
Toto <- DataForExample[order(DataForExample$q0001_0001),]
View(Toto) # NOK : the labels disappeared
谢谢
您需要加载支持 class labelled
子集操作的包。最好在 haven
之后加载它。至少有两个包具有这样的支持:Hmisc
和 expss
。免责声明:我是 expss 包的作者。
更新。 修复标记为 class。
似乎 haven
没有为所有带标签的变量设置 labelled
class。所以我们需要修复它:
library(expss)
for(each in colnames(DataForExample)){
if(!("labelled" %in% class(DataForExample[[each]])) &&
(!is.null(var_lab(DataForExample[[each]])) ||
!is.null(val_lab(DataForExample[[each]]))
)) {
class(DataForExample[[each]]) = union("labelled", class(DataForExample[[each]]))
}
}
View(DataForExample) # OK
Toto <- DataForExample[order(DataForExample$q0001),]
View(Toto) # OK