【问题标题】:Subtract a column in a dataframe from many columns in R从 R 中的许多列中减去数据框中的列
【发布时间】: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]
}

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    如果您需要从第二列中减去列3:ncol(df)

    df[3:ncol(df)] <- df[3:ncol(df)]-df[,2]
    

    【讨论】:

    • 完美。谢谢你。我试过了,但在 2 之前没有逗号,所以出现错误说数据帧不匹配。
    • @TPM df[2] 仍然是一个数据框,尺寸不会与其他数据集匹配,而df[,2] 是一个向量,它将对@987654325 的每一列进行减法运算@通过回收
    【解决方案2】:

    使用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 日创建

    【解决方案3】:

    这也可以 - 返回您减去第二列的 9 列。

     df = data.frame(matrix(rnorm(100,0,1),nrow = 10))
     df[,-2] - df[,2]
    

    【讨论】:

    • OP只想从3:ncol(df)中减去,你可能需要df[-c(1:2)]话虽如此,这基本上是我发布的解决方案使用的方法
    • @akrun,很好,你是对的。您需要它来获得与上面提供的代码相同的结果
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多