r - 用成对的行更宽地旋转
问题描述
我的数据如下所示:
id1 id2 date1 date2 len
1 3 2021-01-01 2020-12-01 2
2 3 2021-02-02 2020-12-31 1
3 5 2021-03-01 2020-09-30 3
4 5 2021-03-03 2021-01-30 4
...
每个id2
正好有 2 行。如果我们让A
代表这两行中的第一行和B
第二行,我想得到这个:
id2 A.date1 A.date2 B.date1 B.date2 A.len B.len
3 2021-01-01 2020-12-01 2021-02-02 2020-12-31 2 1
5 2021-03-01 2020-09-30 2021-03-03 2021-01-30 3 4
我认为可能有一种方法可以做到这一点,pivot_wider
但我无法做到。
这是玩具数据:
data.frame(id1 = c(1, 2, 3, 4), id2 = c(3, 3, 5, 5), date1 = as.Date(c("2021-01-01", "2021-02-02", "2021-03-01", "2021-03-03")),
date2 = as.Date(c("2020-12-01", "2020-12-31", "2020-09-30", "2021-01-30")), len = c(2,1,3,4))
解决方案
我们可以创建一个按“id2”分组的序列列(rowid
从 data.table 一步完成)。使用该列作为names_from
并指定多个列values_from
library(dplyr)
library(tidur)
library(data.table)
df1 %>%
# // or do a group by
# group_by(id2) %>%
# mutate(rn = LETTERS[row_number()]) %>%
mutate(rn = LETTERS[rowid(id2)]) %>%
select(-id1) %>%
pivot_wider(names_from = rn, values_from = c(date1, date2, len))
推荐阅读
- tfs - 如何使用 Microsoft.VSTS.Scheduling.RemainingWork 字段来表示分钟?
- kubernetes - 如何在 AzureDevOps 中为 EKS 建立新的服务连接?
- node.js - 获取 http://localhost:4000/ 404(未找到)
- postgresql - 使用 Kafka 和 Spark 的流式 CDC 更改仍然分批处理,而我们希望处理每条记录
- javascript - 如何在传单中设置图像偏移?
- django - 将 django 模型从一个应用程序更改为另一个应用程序,但在 makemigrations 中,添加了新模型
- amazon-web-services - 根据路径将 URL 从云端重定向到 API 网关
- sql - 根据条件选择每个 ID 的单个日期
- python - 使用 sympy 进行区分的问题
- vue.js - vue js中的d3可缩放圆形包装