【问题标题】:Row-wise sum for columns with certain names具有特定名称的列的逐行求和
【发布时间】:2016-02-29 07:18:33
【问题描述】:

我有一个样本数据:

SampleID  a      b     d     f       ca      k     l    cb
1         0.1    2     1     2       7       1     4    3
2         0.2    3     2     3       4       2     5    5
3         0.5    4     3     6       1       3     9    2

我需要找到名称中常见的列的行总和,例如逐行sum(a, ca) 或逐行sum(b,cb)。问题是我有很大的data.frame,理想情况下我可以写出列标题中常见的内容,这样代码只会选择那些列来求和

在此先感谢您的帮助。

【问题讨论】:

    标签: r sum


    【解决方案1】:

    我们可以使用grep 选择具有'a' 的列,对列进行子集化并使用rowSums 并使用'b' 列。

     rowSums(df1[grep('a', names(df1)[-1])+1])
     rowSums(df1[grep('b', names(df1)[-1])+1])
    

    【讨论】:

    • 是否可以对其进行修改,使其返回矩阵、data.frame,并且列的位置始终不是+1。所以,代码可能更通用一点。
    • 我点击了!谢谢!但我还没有太多的名声,它要出现。但我真的做到了!
    • 谢谢。但是您能否再解释一下。我如何修改您的代码以对例如相距 7 列的列的行求和?
    • @OlgaAnufrieva grep 给出列名中具有相同模式的列的列索引。我在 grep 输出中添加了1,因为我在不包括第一列的数据集子集上使用了grepping。所以,如果我理解你的评论,它应该可以工作。
    • 非常感谢您的帮助!
    【解决方案2】:

    如果您希望输出为数据框,请尝试使用 dplyr

    # Recreating your sample data
    df <- data.frame(SampleID = c(1, 2, 3),
                 a = c(0.1, 0.2, 0.5),
                 b = c(2, 3, 4),
                 d = c(1, 2, 3),
                 f = c(2, 3, 6),
                 ca = c(7, 4, 1),
                 k = c(1, 2, 3),
                 l = c(4, 5, 9),
                 cb = c(3, 5, 2)) 
    

    处理数据

    # load dplyr
    library(dplyr)
    
    # Sum across columns 'a' and 'ca' (sum(a, ca))
    df2 <- df %>%
        select(contains('a'), -SampleID) %>% # 'select' function to choose the columns you want 
        mutate(row_sum = rowSums(.)) # 'mutate' function to create a new column 'row_sum' with the sum of the selected columns. You can drop the selected columns by using 'transmute' instead.
    
    df2 # have a look
    
        a ca row_sum
    1 0.1  7     7.1
    2 0.2  4     4.2
    3 0.5  1     1.5
    

    【讨论】:

      猜你喜欢
      • 2015-05-29
      • 2013-03-23
      • 2018-09-26
      • 2022-10-12
      • 2019-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-25
      相关资源
      最近更新 更多