如何将所有字符串数据帧的子集列转换为数字?

时间:2014-12-19 22:53:48

标签: r string dataframe

我的所有数据都以字符格式显示。当我尝试使用apply将数据的子集转换为数字时,它似乎不起作用。

df2  <- as.data.frame(matrix(as.character(1:9),3,3))
df2[,-2]  <-  apply(df2[,-2], 2, as.numeric)
apply(df2, 2, class)

有人能指出我在上面的例子中做错了什么吗? 感谢

1 个答案:

答案 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)