在数据帧中匹配列表元素并计算其在R中的平均值

在数据帧中匹配列表元素并计算其在R中的平均值,r,list,dataframe,lapply,R,List,Dataframe,Lapply,我有一个列表,其长度等于数据帧中的列数 示例如下所示 set.seed(123) list1 <- list(a = c("cat", "dog", "duck", "mice"), b = c("cat", "dog"), c = c("duck", "dog")) df <- data.frame(a = rnorm(10), b = rnorm(10), c = rnorm(10), row.names = c("cat"

我有一个列表,其长度等于数据帧中的列数

示例如下所示

set.seed(123)
list1 <- list(a = c("cat", "dog", "duck", "mice"), b = 
            c("cat", "dog"), c = c("duck", "dog"))

df <- data.frame(a = rnorm(10), b = rnorm(10), c = rnorm(10), 
             row.names = c("cat", "dog", "duck", "mice",
                           "elephant","monkey", "lion",
                           "goat", "cow", "sheep"))
上述元素应与列
a
的行名称匹配,并计算平均值,即
.20964

我想通过使用
R
中的矢量化操作对数据帧中的所有列执行此操作,其中输出是
df
中所有列的平均值列表

我在网上找过类似的问题,但找不到。如果我忽略了,请原谅

编辑

请原谅,如果我把它传达错了,但我想要的输出应该是:

a          b         c
1 0.2096409 -0.3953266 0.6642654
其中
b
df$b
的平均值,它将
list1$b
元素与
df
的行名称相匹配,依此类推

这个怎么样

lapply(list1, function(l) sapply(df[l, ], mean))

我们循环遍历'list1',根据
列表
元素中的行名将'df'的行子集,并得到
colMeans

lapply(list1, function(nm) colMeans(df[nm,], na.rm=TRUE))
#$a
     a          b          c 
# 0.2096409  0.5238374 -0.7601736 

#$b
#        a          b          c  
#-0.3953266  0.7919478 -0.6428993 

#$c
#        a          b          c 
# 0.6642654  0.3802926 -0.6219897 

列表1$a的a列的平均值不是0.17,而是0.61。或者我不明白您的意思。@Haboryme OP创建的数据集没有
set.seed
。所以,无论你得到什么样的值,都会与其他值不同。@Akrun ty指出了这一点。我不聪明,请看帖子的变化。谢谢。也许op从未听说过种子?谢谢你的帖子,但我需要的输出是不同的。请看编辑后的帖子。谢谢你指出。我已经在帖子中添加了一个set.seed并编辑了所需的输出。@AzamYahya如果你应用了codde,它就是我得到的。我要寻找的输出是
df
@AzamYahya中每列的平均值。它是
colMeans
在对行进行子集设置后所做的。你的输出与我的不同。请参阅文章中的编辑。
lapply(list1, function(nm) colMeans(df[nm,], na.rm=TRUE))
#$a
     a          b          c 
# 0.2096409  0.5238374 -0.7601736 

#$b
#        a          b          c  
#-0.3953266  0.7919478 -0.6428993 

#$c
#        a          b          c 
# 0.6642654  0.3802926 -0.6219897