首页 > 解决方案 > 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 座位

不得更改所购买产品的顺序。

你们能帮帮我吗?

非常感谢!

标签: rdatasettransformationwide-column-store

解决方案


我们可以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))

推荐阅读