在数据帧中匹配列表元素并计算其在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