2017-05-29 292 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