r - 如何将基于键的行与组合在单个列中的值组合
问题描述
我尝试了不同的方法,但我需要做的是将不同行的列的值组合成具有一列的单行。我知道这不是规范化的数据,但这种方式更容易理解。
我试过的:
数据集
#dataset
# A tibble: 10 x 3
id key value
<dbl> <dbl> <chr>
1 1 1 h
2 2 1 e
3 3 1 l
4 4 1 l
5 5 1 o
6 6 2 w
7 7 2 o
8 8 2 r
9 9 2 l
10 10 2 d
test <- tribble(~id, ~key, ~value,
1, 1, "h",
2, 1, "e",
3, 1, "l",
4, 1, "l",
5, 1, "o",
6, 2, "w",
7, 2, "o",
8, 2, "r",
9, 2, "l",
10,2, "d")
# pivot_wider() doesnt work
result <- test %>% pivot_wider(names_from = "key", values_from = "value")
我需要的
# A tibble: 2 x 2
key value
<dbl> <list>
1 1 <chr [5]>
2 2 <chr [5]>
expected <- tribble(~key, ~value,
1, c("h", "e", "l", "l","o"),
2, c("w", "o", "r", "l", "d"))
顺序无关紧要,但我确实需要将它们放在同一列中
expected <- tribble(~key, ~value,
1, c("e", "l", "l", "h","o"),
2, c("r", "o", "d", "l", "w"))
解决方案
利用tidyr::nest_by()
library(tidyverse)
test <- tribble(~id, ~key, ~value,
1, 1, "h",
2, 1, "e",
3, 1, "l",
4, 1, "l",
5, 1, "o",
6, 2, "w",
7, 2, "o",
8, 2, "r",
9, 2, "l",
10,2, "d")
test %>% select(-id) %>% nest_by(key)
#> # A tibble: 2 x 2
#> # Rowwise: key
#> key data
#> <dbl> <list<tibble[,1]>>
#> 1 1 [5 x 1]
#> 2 2 [5 x 1]
或者只是在 dplyr
test %>% group_by(key) %>%
summarise(value = list(value))
#> # A tibble: 2 x 2
#> key value
#> <dbl> <list>
#> 1 1 <chr [5]>
#> 2 2 <chr [5]>
由reprex 包于 2021-07-07 创建 (v2.0.0 )
推荐阅读
- postfix-mta - 不要在 Postfix 的邮件传递失败通知上打印堆栈跟踪
- pyqt - 如何使 PyQT 拖动事件复制文件而不是移动它?
- javascript - 最有效地检查循环匹配
- gltf - 什么是 GLTF 动画采样器输入/输出值?
- java - 使用 Java8 过滤两个列表
- plsql - 在 PL/SQL 中实现 Data Vault 的更新算法
- iis - 如何禁用在 applicationHost.config 或 web.config 中未设置的 Http 响应标头?
- spss - 如何使用 SPSS 语法使用变量值来命名文件?
- python - python psutil.cpu_count() 返回错误的 cpu 数量
- javascript - AngularJS范围变量不能在超时内设置