我的所有数据都以字符格式显示。当我尝试使用apply
将数据的子集转换为数字时,它似乎不起作用。
df2 <- as.data.frame(matrix(as.character(1:9),3,3))
df2[,-2] <- apply(df2[,-2], 2, as.numeric)
apply(df2, 2, class)
有人能指出我在上面的例子中做错了什么吗? 感谢
答案 0 :(得分:1)
如上所述...... R中的matrix
只能在所有列中保存相同类型的值。您不能将某些值更改为数字,而将其他值更改为字符。如果您需要不同的数据类型,可以使用data.frame
,但即便如此,每列只能有一种数据类型。
对于您的示例案例:
df2 <- as.data.frame(matrix(as.character(1:9),3,3))
将在每列中创建一个factor
s的data.frame。如果您想将第二列转换为numeric
,您可以执行以下操作:
df2$V2 <- as.numeric(levels(df2$V2))[df2$V2]
或
df$V2 <- as.numeric(as.character(df2$V2))
因此,在这种情况下,您不需要使用apply
。
str(df2)
#'data.frame': 3 obs. of 3 variables:
# $ V1: Factor w/ 3 levels "1","2","3": 1 2 3
# $ V2: num 4 5 6
# $ V3: Factor w/ 3 levels "7","8","9": 1 2 3
如果您想将所有列转换为数字,您可以执行以下操作:
# if the columns were factors before:
df2[] <- lapply(df2, function(i) as.numeric(levels(i))[i])
或
# if the columns were characters before:
df2[] <- lapply(df2, as.numeric)