我使用rio:
将SAS数据导入R中library(rio)
r<-import("S:/MyFolder/MyData.sas7bdat", catalog_file = "S:/MyFolder/formatsforr.sas7bcat")
这给了我的r,它有r $ Race列(存储原子值1,2,3和4),它有一个似乎存储我的Race格式的属性(0 =“All”,1 =“White “,...,8 =”未知“,......)。我想使用属性将r $ Race转换为一个因子。我想为很多专栏做这个。
如果我使用避风港,我本可以这样做:
library(haven)
h <- read_sas("S:/MyFolder/MyData.sas7bdat", "S:/MyFolder/formatsforr.sas7bcat")
h$Race <- as_factor(h$Race) # as_factor is a haven function that converts the column to a factor, using the format to label the factor values.
但as_factor因r而失败(使用rio创建的对象)。
我希望只使用rio,因为其他原因我们更喜欢使用rio。我正在尝试为我的卫生部门的其他程序员创建简单的示例。我想尽量减少他们需要学习和加载的软件包数量,这样我们就可以集中精力学习。
如果这有帮助:
as_factor(r$Race)
返回此信息:
UseMethod(“as_factor”)中的错误: 没有适用于'as_factor'的方法应用于类“c”('double','numeric')的对象“
str(r$Race)
返回:
原子[1:7776] 1 2 3 4 1 2 3 4 1 2 ... - attr(,“label”)= chr“Race(1 = W,2 = B,3 = NatAm / AKNat,4 = Asian / PacIs)” - attr(,“format.sas”)= chr“POPEST199XRACE” - attr(,“labels”)=命名数[1:10] 0 1 2 3 4 0 1 2 3 4 ..- attr(,“names”)= chr [1:10]“Total”“White”“Black”“American Indian or Alaska Native”......
str(h$Race)
返回:
类'标记'原子[1:7776] 1 2 3 4 1 2 3 4 1 2 ... ..- attr(,“label”)= chr“Race(1 = W,2 = B,3 = NatAm / AKNat,4 = Asian / PacIs)” ..- attr(,“format.sas”)= chr“POPEST199XRACE” ..- attr(,“labels”)=命名数[1:10] 0 1 2 3 4 0 1 2 3 4 .. ..- attr(,“names”)= chr [1:10]“Total”“White”“Black”“American Indian or Alaska Native”......
运行导入(...)后立即运行:
dput(head(r$Race))# returns this:
c(1, 2, 3, 4, 1, 2)
运行read_sas(...)后立即运行:
dput(head(h$Race)) # returns this:
structure( c(1, 2, 3, 4, 1, 2),
labels = structure(c(0, 1, 2, 3, 4, 0, 1, 2, 3, 4),
.Names = c("Total", "White", "Black", "American Indian or Alaska Native",
"Asian or Pacific Islander", "Total", "White", "Black",
"American Indian or Alaska Native", "Asian or Pacific Islander")),
class = "labelled")
我没有找到在线.sas7bcat文件。我可以发布SAS代码来创建它和数据文件。
答案 0 :(得分:0)
我放弃了尝试使用rio,而是使用了避风港。当使用import()
调用catalog_file =
时,rio可以在创建的R对象的属性中捕获SAS格式信息,但我无法弄清楚如何使用它们。通过查看避难所的as_factor函数,我看到有些复杂的逻辑避难所用来利用类似的属性(通过避难所的read_sas()
函数创建)。看到它的复杂性,我没有试图模仿它来应用于rio导入对象的属性。