【发布时间】:2015-03-04 15:32:52
【问题描述】:
我有一个数据框。我想从所有其他列中减去第二列。我可以循环执行,但我想一次调用。这是我的工作循环代码:
df <- data.frame(x = 100:101, y = 2:3,z=3:4,a = -1:0,b=4:5)
for( i in 3:length(df) ) {
df[i] <- df[i] - df[2]
}
【问题讨论】:
我有一个数据框。我想从所有其他列中减去第二列。我可以循环执行,但我想一次调用。这是我的工作循环代码:
df <- data.frame(x = 100:101, y = 2:3,z=3:4,a = -1:0,b=4:5)
for( i in 3:length(df) ) {
df[i] <- df[i] - df[2]
}
【问题讨论】:
如果您需要从第二列中减去列3:ncol(df)
df[3:ncol(df)] <- df[3:ncol(df)]-df[,2]
【讨论】:
df[2] 仍然是一个数据框,尺寸不会与其他数据集匹配,而df[,2] 是一个向量,它将对@987654325 的每一列进行减法运算@通过回收
使用dplyr::mutate_at()函数的另一种解决方案
# install.packages("dplyr", dependencies = TRUE)
library(dplyr)
df <- data.frame(x = 100:101, y = 2:3, z = 3:4, a = -1:0, b = 4:5)
df %>%
mutate_at(vars(-matches("y"), -matches("x")), list(dif = ~ . - y))
#> x y z a b z_dif a_dif b_dif
#> 1 100 2 3 -1 4 1 -3 2
#> 2 101 3 4 0 5 1 -3 2
由reprex package (v0.3.0) 于 2019 年 11 月 5 日创建
这也可以 - 返回您减去第二列的 9 列。
df = data.frame(matrix(rnorm(100,0,1),nrow = 10))
df[,-2] - df[,2]
【讨论】:
3:ncol(df)中减去,你可能需要df[-c(1:2)]话虽如此,这基本上是我发布的解决方案使用的方法