我正在尝试一个简单的任务,并创建了一个简单的例子。根据分类单位名称,我想在另一个向量('现有的')中添加一个向量中记录的分类单元的计数('介绍',下面)。 。然而,当有一个新的分类单元(由现有的不存在引入)时,我希望这个分类单元及其计数作为矩阵中的新条目添加(不管什么顺序,但名称需要保留)。
例如:
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)添加到最后
我环顾四周,但之前类似的答案有更复杂的数据,很难提取出我需要的功能。我一直在尝试匹配的组合,但是却无法做到正确。
感谢。
答案 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