按因子水平加上或乘以一个不同的值

问题描述:

是否有比以下更智能的方式对因数级别的数据框列进行简单的算术运算?按因子水平加上或乘以一个不同的值

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

不是很清楚你想要什么 – Sotos

让我们使用的一个因素的内部整数表示的:

df$x2 <- with(df, c(1, -1)[class] + x) 

我不推荐使用dfclass作为变量名然而,当他们被化名为R基本功能。 (出于同样的原因,请勿使用data。)

这里有些解释。您的代码编号为class,因子级别为“低”和“高”,因此它们映射到1和2.请尝试as.integer(df$class)以查看此信息。现在,您的代码建议您为“低”添加1到x,为“高”添加1从x减1,所以我们根据因子水平分配增量矢量c(1, -1),然后将其添加到x

+0

谢谢,我会尽量避免在将来为这样的变量命名,它只是对于MWE无论如何。 这似乎工作,也适用于几个标签,例如, (df,c(1,0,1)[class] + x) –

+0

酷我不知道你可以基于一个因子的内部整数表示 –