2016-11-07 99 views
0

是否有比以下更智能的方式對因數級別的數據框列進行簡單的算術運算?按因子水平加上或乘以一個不同的值

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

回答

3

讓我們使用的一個因素的內部整數表示的:

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

酷我不知道你可以基於一個因子的內部整數表示 –