r-比较矢量的名称,选择常用的矢量并求和

  • 本文关键字:常用 求和 选择 比较 r vector
  • 更新时间 :
  • 英文 :


我正试图在三个有名称的向量中找到共同的名称。我想找出这三个向量中的共同名称,并计算(或求和(这些共同命名向量的值。

例如:

vec1<- c(1:20)
names(vec1) = c( "X13" , "X25", "X58", "X79", "X95" , "X118", "X212", "X311",    
"X422" , "X536", "X899", "X1005","X1080" , "X1118", "X1322", "X1516","X1705" 
, "X1890", "X1925", "X2008")
vec2<- c(21:40)
names(vec2) = c( "X11" , "X25", "X58", "X79", "X119" , "X120", "X212", "X311",    
"X422" , "X536", "X899", "X995","X1080" , "X1098", "X1322", "X1516","X1705" 
, "X1890", "X1930", "X2008")
vec3<- c(41:60)
names(vec3) = c( "X13" , "X25", "X58", "X79", "X95" , "X118", "X212", "X311",    
"X422" , "X536", "X899", "X1005","X1080" , "X1118", "X1322", "X1516","X1705" 
, "X1890", "X1925", "X2010")

在上面的示例中,在vec1、vec2和vec3中,"x25"是值为2,22和42的通用名称。因此,输出应该具有x25,其值为66(2+22+42=66(。

此外,"x13"存在于vec1和vec3中,但不存在于vec2中。所以应该忽略它。

我试过使用is.equal,但是我遇到了错误。

我们可以使用Reduceintersect来找出所有向量之间的通用名称,然后将这些名称从所有向量中子集并相加。

common_names <- Reduce(intersect, list(names(vec1), names(vec2), names(vec3)))
vec1[common_names] + vec2[common_names] + vec3[common_names]    
#  X25   X58   X79  X212  X311  X422  X536  X899 X1080 X1322 X1516 X1705 X1890 
#   66    69    72    81    84    87    90    93    99   105   108   111   114    

这里有一个tidyverse选项

library(tidyverse)
list(vec1, vec2, vec3) %>% 
map_df(enframe, .id = 'vec') %>% 
group_by(name) %>% 
filter(n_distinct(vec) == 3) %>%
summarise(value = sum(value))

最新更新