【问题标题】:How to loop the subtraction of the value in the first row to values in the same column如何循环将第一行中的值减去同一列中的值
【发布时间】:2021-01-27 07:38:31
【问题描述】:

我正在寻找一个函数/循环,它首先挑选出第一个子值单元格以减去第二个单元格中的子值,然后在第二个循环中挑选出第二个单元格等。然后循环为每一列执行此操作

例如: Data Example

G1 - G2、G1 - G3、G1- G4 等。然后是 G2 - G3、G2 - G4 等。

【问题讨论】:

  • 图片不是发布数据(或代码)的好方法。请参阅 this Metarelevant xkcd。你能以dput 格式发布样本数据吗?请使用您尝试过的代码和dput(df) 的输出来编辑问题。或者,如果 dput(head(df, 20)) 的输出太大。 (注意:df 是您的数据集的名称。)同时发布预期的输出。

标签: r loops tidyr


【解决方案1】:

所以你想减去完整的第 1 行和第 2 行,第 1 行和第 3 行,以此类推直到最后一行,然后第 2 行和第 3 行,第 2 行和第 4 行,依此类推直到最后一行,这样直到最后一行?

我认为combn 可以帮助您实现这一目标:

df <- data.frame(a = 1:5, b = 11:15, c = 4:8)
mat <- combn(seq(nrow(df)), 2)
result <- df[mat[1, ], ] - df[mat[2, ], ]

其中mat 返回所有行组合:

mat
#     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#[1,]    1    1    1    1    2    2    2    3    3     4
#[2,]    2    3    4    5    3    4    5    4    5     5

【讨论】:

    【解决方案2】:

    这就是你所追求的吗?

    data = data.frame(matrix(rnorm(3*5, 25, 5), ncol = 3)) # 5 rows for demo
    colnames(data) = c("A","B","C")
    rownames(data) = paste("G",seq(1,nrow(data)), sep = "")
    

    生成的数据如下所示:

    -- A B C
    G1 14.83125 21.33644 21.99278
    G2 33.88000 28.63547 29.96025
    G3 30.60549 22.31251 16.20981
    G4 29.74367 30.92053 20.39461
    G5 17.99330 31.33550 26.07054
    for(i in 1:(nrow(data)-1)){
        print(apply(data[(i+1):nrow(data),], 1, function(x) data[i,] - x ))
    }
    

    这将打印以下输出:

    $G2
               A         B         C
    G1 -19.04875 -7.299035 -7.967464
    
    $G3
               A         B         C
    G1 -15.77425 -0.9760759 5.782972
    
    $G4
               A         B         C
    G1 -14.91243 -9.584088 1.598178
    
    $G5
               A         B         C
    G1 -3.162052 -9.999061 -4.077752
    
    $G3
               A         B         C
    G2  3.274505  6.322959  13.75044
    
    $G4
               A         B         C
    G2  4.136325 -2.285053  9.565641
    
    $G5
               A         B         C
    G2   15.8867 -2.700026  3.889712
    
    $G4
               A         B         C
    G3 0.8618196 -8.608012 -4.184794
    
    $G5
              A          B         C
    G3 12.61219  -9.022985 -9.860724
    
    $G5
              A          B         C
    G4 11.75037  -0.414973  -5.67593
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-28
      • 1970-01-01
      相关资源
      最近更新 更多