匹配数据框中列表的元素并计算它们在R中的平均值

时间:2016-09-20 09:44:56

标签: 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", "dog", "duck", "mice",
                           "elephant","monkey", "lion",
                           "goat", "cow", "sheep"))

然后,每个list1名称的元素应与每列的df中的行名称匹配,并计算它们的平均值。例如:

list$a的元素是:

`[1] "cat"  "dog"  "duck" "mice"`

上述元素应与列a的行名称匹配,并计算均值.20964

我想在R中使用向量化操作对数据框中的所有列执行此操作,其中输出是df中所有列的均值列表。

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

修改

请原谅我输错了,但我想要的输出应该是:

a          b         c
1 0.2096409 -0.3953266 0.6642654

其中bdf$b的平均值,匹配list1$b个元素,行名称为df,依此类推。

2 个答案:

答案 0 :(得分:2)

我们遍历&#39; list1&#39;,将&#39; df&#39;的行子集。根据{{​​1}}元素中的rownames获取imshow

list

答案 1 :(得分:1)

这个怎么样?

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