r - 如何在 R 中将一列的元素与 group_by 相交
问题描述
让我们假设,我的数据就像
group_id col1
1 1 A,B
2 1 B,C
3 2 A,C
4 2 B,D
5 3 A,D
6 3 A,B,C,D
我想总结/变异 col1,其中它的元素在同一组中相交(通过 group_id)。我需要的输出就像(如果总结)
group_id col1
1 1 B
2 2 <NA>
3 3 A,D
或像这样(如果变异)
group_id col1
1 1 B
2 1 B
3 2 <NA>
4 2 <NA>
5 3 A,D
6 3 A,D
我可以通过使用函数轻松地创建一个联合,toString
但我为如何在输出中包含公共元素而摸不着头脑。基本上intersect
需要至少两个参数,因此在这里不起作用。
dput(df) 如下
df <- structure(list(group_id = c(1L, 1L, 2L, 2L, 3L, 3L), col1 = c("A,B",
"B,C", "A,C", "B,D", "A,D", "A,B,C,D")), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6"))
解决方案
您可以使用逗号拆分col1
并使用Reduce
+intersect
来获取每个group_id
.
library(dplyr)
df %>%
group_by(group_id) %>%
summarise(col1 = toString(Reduce(intersect, strsplit(col1, ','))))
# group_id col1
#* <int> <chr>
#1 1 "B"
#2 2 ""
#3 3 "A, D"
推荐阅读
- python - 从谷歌应用脚本调用谷歌云功能
- svg - amCharts4:3D Column / Cone Series 的自定义多边形
- javascript - 如何更新MongoDB中数组中的多个对象?
- python - 如何在 Kivy 中使用 Popup 运行复选框小部件?
- android - OnTouch 旋转视图问题
- r - 求解 R 中的非线性方程
- sql - 如何在 postgresql 中获取分区的总行数
- c++ - 使用按钮填充编辑控件的问题
- wordpress - WooCommerce 块:向所有产品网格添加新徽章
- c# - 如何将拾取的图像绑定到本地 SQLite 数据库并在与媒体选择器按钮所在的页面不同的页面上显示它们?赛马林