r - R中的分组数据
问题描述
我有一个数据框,例如:
User Tag
1 A TagA
2 A TagB
3 A TagC
3 B TagC
4 C TagA
5 C TagC
我想将此数据与此新信息分组:
All = TagA & TagB & TagC
A_B= TagA & TagB
A_C = TagA & TagC
B_C = TagB & TagC
OnlyA = TagA
OnlyB = TagB
OnlyC = TagC
我的最终数据框应如下所示:
User TagSum
1 A All
2 B OnlyC
3 C A_C
我怎样才能在 R 中做到这一点?
谢谢你的帮助。
解决方案
您的数据:
df <- tribble(
~User, ~Tag,
"A", "TagA",
"A", "TagB",
"A", "TagC",
"B", "TagC",
"C", "TagA",
"C", "TagC"
) %>%
as_tibble()
创建指标列:
df <- df %>% cbind(indicator = rep(TRUE, nrow(df))) %>% as_tibble()
用于tidyr::spread()
创建指标 tibble,仅选择指标列,使用 创建长 tibble tidyr::gather
,仅过滤 TRUE 值,选择 User 和 TagSum 值:
df <- df %>%
spread(Tag, indicator, fill = FALSE) %>%
mutate(All = TagA & TagB & TagC,
A_B = TagA & TagB & !TagC,
A_C = TagA & !TagB & TagC,
B_C = !TagA & TagB & TagC,
OnlyA = TagA & !TagB & !TagC,
OnlyB = !TagA & TagB & !TagC,
OnlyC = !TagA & !TagB & TagC,
) %>%
select(-(TagA:TagC)) %>%
gather(TagSum, Value, All:OnlyC) %>%
filter(Value == TRUE) %>%
arrange(User) %>%
select(User, TagSum)
结果:
# A tibble: 3 x 2
User TagSum
<chr> <chr>
1 A All
2 B OnlyC
3 C A_C
推荐阅读
- java - 我的代码中没有生成 DaggerApplicationComponent?
- algorithm - 活动选择问题(反例)
- html - 将 SVG 内联到 HTML 文档时,SVG 图标非常大
- python - .any() 和 .any(1) 有什么区别?
- angular - 为什么我的标题在 Angular 7 中没有响应?
- javascript - 反应路由器页面无法刷新
- c# - PayPal.Api 无法识别 App.config 文件
- vb.net - 如何上传 Excel 文件,然后在 vb.net (ADODB) 中打印该 Excel 文件?
- arrays - 列出在字符串(函数或 VBA)中找到的值
- coq - CoqIde:展示简单的策略在做什么