r - R pivot_wider 每行保留一个 id
问题描述
我有一个包含 ID 和值的数据集,其中一个 ID 可以采用多个值。目前,当有多个值时,相同的 ID 会逐行重复,但我希望每行保留一个 ID,必要时添加更多列。这是一个可重现的示例:
df <- data.frame(id = c(1,1,1,2,3,3),
val = c(10:15))
我想要的是
df2 <- data.frame(id = c(1:3),
val1 = c(10, 13, 14),
val2 = c(11, "", 15),
val3 = c(12, "", ""))
我尝试使用pivot_wider
以下方法完成它,但它有两个问题:(1)无法弄清楚如何创建我自己的列名;(2) 想要添加列,但它在单元格中创建了一个列表。
library(tidyr)
df %>% pivot_wider(values_from = val, values_fn = list, names_prefix = "x")
解决方案
您需要添加一个序列列:
df %>% group_by(id) %>%
mutate(time=row_number()) %>%
pivot_wider(names_from=time, values_from = val, names_prefix = "val")
# A tibble: 3 x 4
# Groups: id [3]
id val1 val2 val3
<dbl> <int> <int> <int>
1 1 10 11 12
2 2 13 NA NA
3 3 14 15 NA
library(tidyr)
library(dplyr)
推荐阅读
- javascript - 我如何以及何时在 React 组件中使用 useReducer?
- java - 房间数据库架构更新
- android - 有没有办法在 Android Zebra TC520K 上以编程方式扫描 ITF-14 条码?
- javascript - 如何使用ajax控制套件从当前日期选择三个日期之后的日期
- python - 通过 API 调用获取信息并进行身份验证
- qt - 在 centos 7 上从源代码编译 qt5.12 的 mysql 驱动程序
- sql - 如何在 Matillion Flow 的 SQL 组件中使用 SUBSTRING()?
- c# - ASP.Net:是否可以使用 Windows 身份验证并将 HttpContext.Current.User 设置为 GenericPrincipal
- linux - 为什么 Kubernetes 会为 ioctl 返回奇怪的结果
- bash - 期待 ping 测试的脚本