关于r:lapply(x,as.factor)仅返回一级

lapply(x, as.factor) returning just one level

本问题已经有最佳答案,请猛点这里访问。

假设我有以下数据框

1
2
3
4
a <- as.integer(runif(20, 1, 30))
b <- as.integer(runif(20, 10, 30))
df <- data.frame(Sender = a, Receiver = b)
df

我想将两列都转换为factor:

1
2
3
var <- c("Sender","Receiver")
df[var] <- lapply(var, factor)
str(df)

但是事实证明,每列中只有一个级别,而不是我的示例中的唯一数字

1
2
3
'data.frame':   20 obs. of  2 variables:
 $ Sender  : Factor w/ 1 level"Sender": 1 1 1 1 1 1 1 1 1 1 ...
 $ Receiver: Factor w/ 1 level"Receiver": 1 1 1 1 1 1 1 1 1 1 ...

如果我单独进行的话当然可以工作:

1
2
df$Sender <- as.factor(df$Sender)
df$Receiver <- as.factor(df$Receiver)

有人可以解释为什么吗?


您实际上不是在这里使用原始数据,只是在使用标签。

像这样尝试:

1
df <- as.data.frame(lapply(df, factor))

您要

1
df[] <- lapply(df, factor)