r - R数据集从长到宽 - 在特定条件下
问题描述
我想通过ID将一个长且按时间顺序排列的数据集转换为一个宽但按时间顺序排列的数据集让我们看一个例子:
ID | 产品 | 日期 |
---|---|---|
1 | 自行车 | 2000 年 1 月 1 日 |
1 | 胎 | 2000 年 2 月 1 日 |
2 | 车 | 2000 年 15 月 2 日 |
2 | 座位 | 2000 年 17 月 2 日 |
1 | 计时器 | 20/2/2000 |
进入下表:
ID | 第一 | 第二 | 第三 | ETC |
---|---|---|---|---|
1 | 自行车 | 胎 | 计时器 | |
2 | 车 | 座位 |
不得更改所购买产品的顺序。
你们能帮帮我吗?
非常感谢!
解决方案
我们可以dcast
使用data.table
library(data.table)
dcast(setDT(df), ID ~ rowid(ID), value.var = c('Product', 'Date'))
# ID Product_1 Product_2 Product_3 Date_1 Date_2 Date_3
#1: 1 Bike Tire Chronometer 1/1/2000 2/1/2000 20/2/2000
#2: 2 Car Seat <NA> 15/2/2000 17/2/2000 <NA>
数据
df <- structure(list(ID = c(1L, 1L, 2L, 2L, 1L), Product = c("Bike",
"Tire", "Car", "Seat", "Chronometer"), Date = c("1/1/2000", "2/1/2000",
"15/2/2000", "17/2/2000", "20/2/2000")), class = "data.frame",
row.names = c(NA,
-5L))
推荐阅读
- postgresql - postgresql:测试 dblink 连接的触发器,如果不存在则建立
- python - 平均相邻值时通过numpy数组优化迭代
- linux - 为什么 LOAD 程序头的虚拟地址和 gdb 显示的运行时虚拟地址不同?
- awk - 使用 awk one liner 比较浮点数
- pytest - setup() 函数的 pytest 奇怪行为
- unicode - 为什么恢复的文件没有以前的符号?
- kentico - 如何在 C# Kentico 12 MVC 中获取别名路径/节点别名
- angular - 为什么离子物品不显示?
- python - 制作情节的python列表
- laravel - Laravel邮件本地主机它在godaddy服务器上工作正常它给连接无法建立主机smtp.gmail.com错误