2017-05-29 114 views
1

我有如下两个列表:如何计算的两个列表平均值为每行

l1 <- list(a=1, b=2, c=3) 
l2 <- list(a=4, b=5, c=6) 

我想计算两个列表的每一行的平均值和结果分配到一个新的列表。如下所示:

l3 <- mean(l1, l2) 

我该如何在R中实现这一点?

回答

1

我们可以使用Map

Map(function(x,y) mean(c(x,y)), l1, l2) 

或者与map2purrr

purrr::map2(l1, l2, ~ mean(c(.x, .y))) 

或者使用tidyverse

library(tidyverse) 
bind_rows(l1, l2) %>% 
     summarise_all(mean) %>% 
     unlist() %>% 
     relist(., skeleton = l1) 

或者另一种选择是

relist((unlist(l1) + unlist(l2))/2, skeleton= l1) 

注:所有的解决方案返回list如在后

1
apply(cbind(do.call(rbind,l1),do.call(rbind,l2)),1, mean) 
3

提到的OP使用:

colMeans(do.call(rbind.data.frame, list(l1,l2))) 

给:

a b c 
2.5 3.5 4.5