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