R通过变量将数据从列转换为行
R transforming data from columns to rows by variable
我在转换数据框时遇到问题。我想计算每个客户购买的频率(多少天一次)。我认为最简单的方法是将我的交易数据转换为以下格式:
Transatcion_ID Client_ID Date
1 1 2017-01-01
2 1 2017-01-04
3 2 2017-02-21
4 1 2017-05-01
5 3 2017-02-04
6 3 2017-03-01
... ... ...
至:
Client_ID Date_1_purchase Date_2_purchase Date_3_purchase ...
1 2017-01-01 2017-01-04 2017-05-01 ...
2 2017-02-21 NA NA ...
3 2017-02-04 2017-03-01 NA ...
或者:
Client_ID Date_First_purchase Date_Last_purchase Numberof_orders
1 2017-01-01 2017-05-01 3
2 2017-02-21 2017-02-21 1
3 2017-02-04 2017-03-01 2
我尝试过使用 dcast,但无法实现我想要的效果。我敢打赌有一种方法可以做到这一点,或者甚至可以在不转换数据集的情况下计算出我想要的东西,但我没有找到它。
我们可以用 rowid
to dcast
from 'long' to 'wide' format
创建一个序列id
library(data.table)
dcast(setDT(df1), Client_ID ~ paste0("Date_", rowid(Client_ID),
"_purchase"), value.var = "Date")
# Client_ID Date_1_purchase Date_2_purchase Date_3_purchase
#1: 1 2017-01-01 2017-01-04 2017-05-01
#2: 2 2017-02-21 NA NA
#3: 3 2017-02-04 2017-03-01 NA
我在转换数据框时遇到问题。我想计算每个客户购买的频率(多少天一次)。我认为最简单的方法是将我的交易数据转换为以下格式:
Transatcion_ID Client_ID Date
1 1 2017-01-01
2 1 2017-01-04
3 2 2017-02-21
4 1 2017-05-01
5 3 2017-02-04
6 3 2017-03-01
... ... ...
至:
Client_ID Date_1_purchase Date_2_purchase Date_3_purchase ...
1 2017-01-01 2017-01-04 2017-05-01 ...
2 2017-02-21 NA NA ...
3 2017-02-04 2017-03-01 NA ...
或者:
Client_ID Date_First_purchase Date_Last_purchase Numberof_orders
1 2017-01-01 2017-05-01 3
2 2017-02-21 2017-02-21 1
3 2017-02-04 2017-03-01 2
我尝试过使用 dcast,但无法实现我想要的效果。我敢打赌有一种方法可以做到这一点,或者甚至可以在不转换数据集的情况下计算出我想要的东西,但我没有找到它。
我们可以用 rowid
to dcast
from 'long' to 'wide' format
library(data.table)
dcast(setDT(df1), Client_ID ~ paste0("Date_", rowid(Client_ID),
"_purchase"), value.var = "Date")
# Client_ID Date_1_purchase Date_2_purchase Date_3_purchase
#1: 1 2017-01-01 2017-01-04 2017-05-01
#2: 2 2017-02-21 NA NA
#3: 3 2017-02-04 2017-03-01 NA