r - dplyr - 在嵌套列表中按元素汇总

标签 r dataframe dplyr

我有以下data.frame:

df <- data.frame(X1 = c(1,2,2))
df$X2 <- list(list(1, 2), list(0, 1), list(1,0))

df
  X1    X2
1  1  1, 2
2  2  0, 1
3  2  1, 0

现在,我想添加一个新列,它是 X2 中共享相同 X1 值的所有列表的按元素平均值,例如:

  X1  mean
1  1  1, 2
2  2  0.5, 0.5

我尝试了以下说明:

df %>% group_by(X1) %>% summarise(mean = mean(X2))

但我得到的只是

     X1  mean
  <dbl> <dbl>
1  1.00    NA
2  2.00    NA
Warning messages:
1: In mean.default(X2) : argument is not numeric or logical: returning NA

如何构建这个新专栏?

最佳答案

我们可能会使用

df <- df %>% group_by(X1) %>% 
  summarise(mean = list(map(reduce(X2, `map2`, `+`), `/`, n())))
df$mean
# [[1]]
# [[1]][[1]]
# [1] 1
#
# [[1]][[2]]
# [1] 2
#
#
# [[2]]
# [[2]][[1]]
# [1] 0.5
#
# [[2]][[2]]
# [1] 0.5

解释:先分组后,用

reduce(X2, `map2`, `+`)

我们按元素添加所有列表。然后为了获得平均值,我们使用另一个 map/。最后,list 返回一个列表。

更新:您也可以使用

df %>% group_by(X1) %>%
  summarise(mean = list(pmap(X2, ~ sum(...) / n())))

df %>% group_by(X1) %>%
  summarise(mean = list(pmap(X2, ~ mean(c(...)))))

不幸的是list(pmap(X2,mean))不起作用

mean(1, 2)
# [1] 1

关于r - dplyr - 在嵌套列表中按元素汇总,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54607053/

相关文章:

python - R/SQL/ python : Extracting connected components from node-edge pairs

r - 绘制图例向左移动ggplot

r - 多变量动态时间规整(DTW)与 R

python - 使用 pandas 在 python 中动态解析日期为日期时间

r - 如果列包含文本,请选择该列?

r - 如何按组获取汇总统计数据

r - igraph layout.fruchterman.reingold 离群值(包含示例图像)

apache-spark - Pyspark 数据框中的重复行

python - Pandas - 对于行中给定的列值,返回名称与值匹配的列中的值

r - R 中重叠/非重叠时间间隔的总和