元素明智地在列表列中添加向量

时间:2016-12-06 11:07:22

标签: r dplyr

我有这个tibble,它有一个带有向量的列表列

df <- data_frame(grp = c("A", "A", "B", "B"),
                 x = rep(c(list(c(1,2,3)), list(c(4,5,6))), 2))

我想做的事情(最好是在tidyverse内)是在列表中执行元素明智的向量添加, 基本上:

c(1,2,3) +  c(4,5,6) 
# [1] 5 7 9

此:

 # A tibble: 4 × 2
 grp         x
 <chr>    <list>
 A        list(c(1,2,3))
 A        list(c(4,5,6))
 B        list(c(1,2,3))
 B        list(c(4,5,6))

变为:

 # A tibble: 2 × 2
 grp         y
 <chr>    <list>
 A        list(c(5,7,9))
 B        list(c(5,7,9))

什么可能是一个好方法?

2 个答案:

答案 0 :(得分:3)

以下内容也可以满足您的需求:

dff %>% group_by(grp) %>%
        summarise(x = list(Reduce("+",x))) %>%
        ungroup()

我希望这会有所帮助。

答案 1 :(得分:2)

我们可以尝试

library(dplyr)
library(tidyr)
r1 <- lengths(df$x)[1]

unnest(df) %>%
      group_by(grp) %>%
      mutate(grp1 = rep(seq(r1), 2)) %>% 
      group_by(grp1, add = TRUE) %>%
      summarise(x = sum(x)) %>% 
      group_by(grp) %>% 
      summarise(x= list(x))
# A tibble: 2 × 2
#   grp         x
#  <chr>    <list>
#1     A <dbl [3]>
#2     B <dbl [3]>