【问题标题】:R: summing values of matched names and adding on new names' valuesR:求和匹配名称的值并添加新名称的值
【发布时间】:2014-04-22 00:53:12
【问题描述】:

我正在尝试一个简单的任务,并创建了一个简单的示例。根据分类单元名称,我想将向量中记录的分类单元的计数(“引入”,下面)添加到另一个向量(“现有”)中已经测量的计数。但是,当有一个新的分类单元(存在于不存在的引入)时,我希望将此分类单元及其计数添加为矩阵中的新条目(无论顺序如何,但名称需要保留)。

例如:

existing<-c(3,4,5,6)
names(existing)<-c("Tax1","Tax2","Tax3","Tax4")
introduced<-c(2,2)
names(introduced)<-c("Tax1","Tax5")

我想要新的矩阵,在这里称为“组合”,看起来像这样:

#names(combined)= c("Tax1","Tax2","Tax3","Tax4","Tax5")
#combined= c(5,4,5,6,2)

主要看到的是“Tax1”的值被组合(3+2=5),“Tax5”(2)被添加到末尾

我环顾四周,但与此类似的先前答案具有更复杂的数据,并且很难提取我需要的功能。我一直在尝试 match 和 which 的组合,但就是不能正确。

【问题讨论】:

    标签: r vector indexing match


    【解决方案1】:

    您可以考虑将它们收集在一个数据框中,而不是将数据保存在“松散”的向量中。首先,把你的两组向量数据放在数据框中:

    existing <- c(3, 4, 5, 6)
    taxon <- c("Tax1", "Tax2", "Tax3", "Tax4")
    df1 <- data.frame(existing, taxon)
    
    introduced <- c(2, 2)
    taxon <- c("Tax1", "Tax5")
    df2 <- data.frame(introduced, taxon)
    

    然后merge 两个数据框按公共列“分类单元”。设置all = TRUE 以包含两个数据帧中的所有行:

    df3 <- merge(df1, df2, all = TRUE) 
    

    最后,将“现有”和“引入”分类单元相加,并将结果添加到数据框中:

    df3$combined <- rowSums(df3[ , c("existing", "introduced")], na.rm = TRUE)
    df3
    #   taxon existing introduced combined
    # 1  Tax1        3          2        5
    # 2  Tax2        4         NA        4
    # 3  Tax3        5         NA        5
    # 4  Tax4        6         NA        6
    # 5  Tax5       NA          2        2
    

    【讨论】:

      【解决方案2】:
      grp <- c(existing,introduced)
      tapply(grp,names(grp),sum)
      
      #Tax1 Tax2 Tax3 Tax4 Tax5 
      #   5    4    5    6    2 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多