我有一个dataframe。我想从所有其他列中减去第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] }
vatpfxk51#
如果需要从第二列中减去列3:ncol(df)
3:ncol(df)
df[3:ncol(df)] <- df[3:ncol(df)]-df[,2]
mrfwxfqh2#
使用dplyr::mutate_at()函数的另一种解决方案
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
更新:从dplyr 1.0+开始,建议使用across
dplyr 1.0+
across
df %>% mutate(across(c(-matches("y"), -matches("x")), ~ . - y, .names = "{col}_dif"))
创建于2019-11-05由reprex package(v0.3.0)
ijnw1ujt3#
这也可以工作-返回您减去第二列的9列。
df = data.frame(matrix(rnorm(100,0,1),nrow = 10)) df[,-2] - df[,2]
3条答案
按热度按时间vatpfxk51#
如果需要从第二列中减去列
3:ncol(df)
mrfwxfqh2#
使用
dplyr::mutate_at()
函数的另一种解决方案更新:从
dplyr 1.0+
开始,建议使用across
创建于2019-11-05由reprex package(v0.3.0)
ijnw1ujt3#
这也可以工作-返回您减去第二列的9列。