按因子水平添加或乘以不同的值
Add or multiply a different value by factor level
有没有比下面更聪明的方法来按因子级别对数据框列进行简单的算术运算?
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
可以工作?
让我们使用因子的内部整数表示:
df$x2 <- with(df, c(1, -1)[class] + x)
不过,我不建议使用 df
和 class
作为变量名,因为它们是 R 基本函数的别名。 (出于同样的原因,不要使用 data
。)
这里有一些解释。您已使用因子水平 "low" 和 "high" 对 class
进行编码,因此它们映射到 1 和 2。尝试 as.integer(df$class)
看看这个。现在,您的代码建议您要为 "low" 向 x
加 1,为 "high" 从 x
减 1,因此我们根据 c(1, -1)
分派增量向量到因子水平,然后将其添加到 x
.
有没有比下面更聪明的方法来按因子级别对数据框列进行简单的算术运算?
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
可以工作?
让我们使用因子的内部整数表示:
df$x2 <- with(df, c(1, -1)[class] + x)
不过,我不建议使用 df
和 class
作为变量名,因为它们是 R 基本函数的别名。 (出于同样的原因,不要使用 data
。)
这里有一些解释。您已使用因子水平 "low" 和 "high" 对 class
进行编码,因此它们映射到 1 和 2。尝试 as.integer(df$class)
看看这个。现在,您的代码建议您要为 "low" 向 x
加 1,为 "high" 从 x
减 1,因此我们根据 c(1, -1)
分派增量向量到因子水平,然后将其添加到 x
.