使用purrr按行计算向量列表的值并减少

时间:2017-07-20 17:55:51

标签: r purrr

我这里有这个地图,它使用purrr:map。

返回一个滞后矢量列表
purrr:map(0:2,~ lag(1:10, .x))
  

[[1]]   [1] 1 2 3 4 5 6 7 8 9 10

     

[[2]]   [1] NA 1 2 3 4 5 6 7 8 9

     

[[3]]   [1] NA NA 1 2 3 4 5 6 7 8

如果将这些矢量合并为一个元素,我有兴趣计算行的平均值。

我知道我可以使用行对行进行求和。所以,例如,

reduce(map(0:2,~ lag(1:10, .x)), `+`)
  

[1] NA NA 6 9 12 15 18 21 24 27

然而,当我尝试:

reduce(map(0:2,~ lag(1:10, .x)), ~ mean(.x, na.rm=T))
  

5.5

这不是我感兴趣的答案。如何使用purrr做到这一点?

2 个答案:

答案 0 :(得分:1)

您可以使用pmap的变体同时循环遍历所有三个向量。因为mean采用数字向量,我使用匿名函数通过c将这三个元素连接在一起。

pmap_dbl返回数字向量。

map(0:2, ~lag(1:10, .x) ) %>%
     pmap_dbl( function(a, b, c) mean( c(a, b, c), na.rm = TRUE) )

[1] 1.0 1.5 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0

开发版本添加了..1类型编码和波形符号来引用每个列表。

map(0:2, ~lag(1:10, .x) ) %>%
     pmap_dbl( ~mean( c(..1, ..2, ..3), na.rm = TRUE) )

答案 1 :(得分:0)

中间数据框看起来不太漂亮,但它仍然按预期工作:

purrr::map(0:2,~ lag(1:10, .x)) %>% as.data.frame() %>% rowMeans(na.rm=TRUE)