R:对匹配名称的值求和并添加新名称的值

时间:2014-03-16 22:19:42

标签: r vector indexing match which

我正在尝试一个简单的任务,并创建了一个简单的例子。根据分类单位名称,我想在另一个向量('现有的')中添加一个向量中记录的分类单元的计数('介绍',下面)。 。然而,当有一个新的分类单元(由现有的不存在引入)时,我希望这个分类单元及其计数作为矩阵中的新条目添加(不管什么顺序,但名称需要保留)。

例如:

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

我想要新的矩阵,称为&#34;合并&#34;在这里,看起来像这样:

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

最重要的是&#34; Tax1&#34;的值被合并(3 + 2 = 5),&#34; Tax5&#34; (2)添加到最后

我环顾四周,但之前类似的答案有更复杂的数据,很难提取出我需要的功能。我一直在尝试匹配的组合,但是却无法做到正确。

感谢。

2 个答案:

答案 0 :(得分:1)

grp <- c(existing,introduced)
tapply(grp,names(grp),sum)

#Tax1 Tax2 Tax3 Tax4 Tax5 
#   5    4    5    6    2 

答案 1 :(得分:0)

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

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两个数据框由公共列“taxon”组成。设置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