r - 数据整理?- 如何根据唯一标识符将多行数据重塑/折叠到 R 中的一个单元格中?
问题描述
我希望获取多行数据并将它们折叠到每个唯一标识符的一个单元格中。我正在使用一个相当混乱、大小合适的数据框,但我正在尝试完成的一个非常简单的示例如下:
mydf = data_frame(x=c(rep("A",3),rep("B",3),rep("C",3)),
y=letters[1:9])
mydf
# A tibble: 9 x 2
x y
<chr> <chr>
1 A a
2 A b
3 A c
4 B d
5 B e
6 B f
7 B g
8 B h
9 B i
我想运行一些代码......理想情况下通过使用tidyverse
类似的东西mydf %>% mutate(y = I'm really not sure, maybe one of the map functions)
,然后最终的数据框看起来像这样:
better = data_frame(x=c("A","B","C"),
y=list(c(letters[1:3]),c(letters[4:6]),c(letters[7:9])))
better
# A tibble: 3 x 2
x y
<chr> <list>
1 A <chr [3]>
2 B <chr [4]>
3 C <chr [3]>
better$y
[[1]]
[1] "a" "b" "c"
[[2]]
[1] "d" "e" "f"
[[3]]
[1] "g" "h" "i"
如前所述,我的数据更大、更混乱,希望最终会出现在一个 Shiny 应用程序中,因此它需要完全自主,因此需要对可用的功能有充分的了解才能使其工作。我想它可能需要更多的步骤,而不仅仅是mutate
创建一个类似的单独数据框better
,然后left_join
将其恢复为原始数据框。
谢谢!
解决方案
我们需要一个组summarise
,我们将'y'包装在一个list
out <- mydf %>%
group_by(x) %>%
summarise(y = list(y))
# A tibble: 3 x 2
# x y
# <chr> <list>
#1 A <chr [3]>
#2 B <chr [3]>
#3 C <chr [3]>
out$y
#[[1]]
#[1] "a" "b" "c"
#[[2]]
#[1] "d" "e" "f"
#[[3]]
#[1] "g" "h" "i"
推荐阅读
- node.js - Docker 构建不使用来自 npm ci 的缓存
- c - Vim 指定语法文件(不是语法类型)?
- java - JNI:处理复杂的 C++ 类
- sql - PostgreSQL 子查询 - 计算滞后值的平均值
- ruby-on-rails - PSQL 数据库更新触发器更新过程有效。但是插入过程没有
- c# - 在 ubuntu 中构建 .NET Core 控制台应用程序 - 使用本机代码查找 c# nuget 的 windows dll 而不是 .so 文件
- css - 尝试在当前版本的 Safari 中包装多个表格时出现 Flex 错误?
- python - 如何从字符串和使用正则表达式在python中创建一个列表
- python - 如何使用 python 从交互式图表中抓取数据?
- sql - 查找三个相关表之间的缺失行