所以在我通过memsci导入了一个data.set(它的工作非常好btw!:)),我现在遇到的问题是几乎所有的数据都被转换为(非有序的)因子,但是水平不是1,2,3,4,5(计算时应该是这样),而是“完全同意”到“完全不同意”。
这导致了我无法使用as.numeric(levels(f))[f]
将因子转换为数字的问题。
要导入我的数据,我使用了这个:
data <- as.data.set(spss.system.file("data.sav"))
dat <- as.data.frame(data)
但是:信息似乎就在那里。
str(var1)
Factor w/ 5 levels "don't agree at all",..: NA 1 1 1 1 1 1 1 1 1 ...
labels(dat$var1)
[1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12"
[13] "13" "14" "15" "16" "17" "18" "19" "20" "21" "22" "23" "24"
levels(dat$var1)
[1] "do not agree at all" ". ." ". . ."
[4] ". . . ." "fully agree"
值存储在哪里?我试过labels(var1)
而只是var1
,但我都没有。但是:使用as.numeric(var1)
向我提供了我需要的信息,但我不认为应该按照R帮助中的说明应用这些因素。使用dat[,1:ncol(dat)] <- lapply(dat[,1:ncol(dat)], function(x) as.numeric(x))
后
该变量仍被视为一个因素,其行为与以前完全相同。
编辑:感谢@jakub
的可重复示例var1 <- factor(c(1,2,3,4,5,5,4,3,2,1),
levels = as.character(1:5),
labels = c("Fully agree", "....", "...", "..", "Do not agree at all"))
答案 0 :(得分:1)
你说:
as.numeric(var1)
向我提供了我需要的信息,但我不认为应该按照R帮助中的说明应用这些因素
如果您参考:
那么你很可能会混淆两个问题。您要么需要标签,要么需要级别。特别是,
as.numeric
应用于某个因素是没有意义的,可能是通过隐式强制发生的。
如果您的数值碰巧是因子的标签,那么您确实必须使用as.numeric(levels(f))[f]
转换为数字。一个例子:
var1 <- factor(c(1,2,3,1),
labels = c("123", "5", "-11"),
levels = as.character(1:3))
levels(var1)
# [1] "123" "5" "-11"
as.numeric(var1)
# [1] 1 2 3 1 #this indeed does not make much sense - the values are lost!
as.numeric(levels(var1))[var1]
#[1] 123 5 -11 123
但在你的情况下,这不适用,因为(如果我理解正确),你不需要标签,而是底层整数。对您而言,Fully agree
表示1
是有道理的。在这种情况下,as.numeric(var1)
没问题。