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

R 比较矢量的名称,选择常用的名称并求和,r,vector,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"

我试图在三个有名字的向量中找到共同的名字。我想找到这三个向量中的公共名称,然后对这些公共名称向量的值进行计数或求和

例如:

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,其值为662+22+42=66

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

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

我们可以使用Reduce和intersect找出所有向量之间的通用名称,然后从所有向量中对这些名称进行子集并添加它们

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    
我们可以使用Reduce和intersect找出所有向量之间的公共名称,然后将所有向量中的名称子集并相加

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的选项

这里有一个带tidyverse的选项