是否有比以下更聪明的方法对因子级别的数据帧列进行简单的算术运算?
data <- runif(100,0,1)
df <- data.frame(x = data,
class = cut(data, breaks = c(0,0.5,1), labels = c("low", "high")))
df$x2 <- ifelse(df$class == "high", df$x - 1, df$x + 1)
我有一个具有多个因子级别的数据框,并希望使用不同值的向量来添加/乘以这些值。我可能会split
可能有用吗?
答案 0 :(得分:3)
让我们使用因子的内部整数表示:
df$x2 <- with(df, c(1, -1)[class] + x)
我建议不要使用df
和class
作为变量名称,因为它们是R基本函数的别名。 (出于同样的原因,不要使用data
。)
这里有一些解释。您已将class
编码为因子级别&#34;低&#34;和&#34;高&#34;,所以他们映射到1和2.尝试as.integer(df$class)
看到这个。现在,您的代码建议您为{&#34;低&#34;添加1到x
。并从x
中减去1为&#34;高&#34;,因此我们根据因子级别调度增量向量c(1, -1)
,然后将其添加到x
。