lapply(x,as.factor)只返回一个级别

时间:2016-12-16 10:04:46

标签: r lapply

让我们说我有以下数据框

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

我想将两个列转换为因子:

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

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

'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 ...

当然,如果我单独做的话会有效:

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

有人可以解释原因吗?

2 个答案:

答案 0 :(得分:3)

您实际上并未在此处使用原始数据,只是标签。

试试这样:

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

答案 1 :(得分:1)

你想要

df[] <- lapply(df, factor)