R 在列中旋转过去6个月的数据
我有不同客户分期偿还贷款的数据 数据包括客户的基本详细信息,如R 在列中旋转过去6个月的数据,r,R,我有不同客户分期偿还贷款的数据 数据包括客户的基本详细信息,如姓名,年龄,工资,地区,信用评分等 有一些随时间变化的字段,如每月更新的未清余额(但我并不真正关心这些数据) 在我的数据集中,每个客户有6行数据(在过去6个月内,每个月1行)。每行包含一个名为状态(已付/未付)的列 示例数据集如下所示: Customer Number Age Balance Status A123 34 1000 Paid A123 34 2000
姓名
,年龄
,工资
,地区
,信用评分
等
有一些随时间变化的字段,如每月更新的未清余额(但我并不真正关心这些数据)
在我的数据集中,每个客户有6行数据(在过去6个月内,每个月1行)。每行包含一个名为状态
(已付/未付)的列
示例数据集如下所示:
Customer
Number Age Balance Status
A123 34 1000 Paid
A123 34 2000 UnPaid
A123 34 1500 UnPaid
A123 34 1400 Paid
A123 34 1300 Paid
A123 34 1400 UnPaid
A234 36 1000 Paid
A234 36 4000 Paid
A234 36 3000 UnPaid
A234 36 5000 Paid
A234 36 6000 UnPaid
A234 36 1700 Paid
我想将数据转换为以下格式:
Customer
Number Age Balance Status1 Status2 Status3 Status4 Status5 Status6
A123 34 1000 Paid UnPaid UnPaid Paid Paid UnPaid
A234 36 1000 Paid Paid UnPaid Paid UnPaid Paid
请注意,我只对其他列的最新值感兴趣(Age
,Balance
等)
我尝试了casting()
函数,但它没有达到我想要的效果
有人能帮忙吗 我们可以为每个
编号
选择余额
的第一个
值,并创建一列来分配唯一的状态编号,然后以宽格式获取数据
library(dplyr)
df %>%
group_by(Number) %>%
mutate(Balance = first(Balance),
col = paste0("Status", row_number())) %>%
tidyr::pivot_wider(names_from = col, values_from = Status)
# Number Age Balance Status1 Status2 Status3 Status4 Status5 Status6
# <fct> <int> <int> <fct> <fct> <fct> <fct> <fct> <fct>
#1 A123 34 1000 Paid UnPaid UnPaid Paid Paid UnPaid
#2 A234 36 1000 Paid Paid UnPaid Paid UnPaid Paid
库(dplyr)
df%>%
分组依据(编号)%>%
变异(平衡=第一个(平衡),
col=paste0(“状态”,行号())%>%
tidyr::pivot\u更宽(名称\u from=col,值\u from=Status)
#数字账龄余额状态1状态2状态3状态4状态5状态6
#
#1 A123 34 1000已付款未付款
#2 A234 36 1000已付款未付款
数据
df <- structure(list(Number = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 2L,
2L, 2L, 2L, 2L, 2L), .Label = c("A123", "A234"), class = "factor"),
Age = c(34L, 34L, 34L, 34L, 34L, 34L, 36L, 36L, 36L, 36L,
36L, 36L), Balance = c(1000L, 2000L, 1500L, 1400L, 1300L,
1400L, 1000L, 4000L, 3000L, 5000L, 6000L, 1700L), Status = structure(c(1L,
2L, 2L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 2L, 1L), .Label = c("Paid",
"UnPaid"), class = "factor")), class = "data.frame", row.names = c(NA, -12L))
df这是否回答了您的问题?