基于R中另一个数据帧中的另一列,在一个数据帧中创建一列
我对R和DPLYR是相当陌生的,在这个问题上我陷入了困境: 我有两张桌子: (1) 汽车修理 (2) 一段时间内每辆车的欠款 我想做的是在repair表上创建三个额外的列,这些列提供: (1) 汽车修理时的欠款, (2) 3个月后的路和 (3) 最后一次付款记录存档 如果维修日期与任何付款记录不匹配,我需要使用记录中最接近的欠款金额 比如: 你知道我该怎么做吗 以下是数据帧: 汽车修理:基于R中另一个数据帧中的另一列,在一个数据帧中创建一列,r,dplyr,tidyverse,R,Dplyr,Tidyverse,我对R和DPLYR是相当陌生的,在这个问题上我陷入了困境: 我有两张桌子: (1) 汽车修理 (2) 一段时间内每辆车的欠款 我想做的是在repair表上创建三个额外的列,这些列提供: (1) 汽车修理时的欠款, (2) 3个月后的路和 (3) 最后一次付款记录存档 如果维修日期与任何付款记录不匹配,我需要使用记录中最接近的欠款金额 比如: 你知道我该怎么做吗 以下是数据帧: 汽车修理: df_repair <- data.frame(unique_id = c("A
df_repair <- data.frame(unique_id =
c("A1","A2","A3","A4","A5","A6","A7","A8"),
car_number = c(1,1,1,2,2,2,3,3),
repair_done = c("Front Fender","Front
Lights","Rear Lights","Front Fender", "Rear Fender","Rear Lights","Front
Lights","Front Fender"),
YearMonth = c("2014-03","2016-03","2016-07","2015-05","2015-08","2016-01","2018-01","2018-05"))
df_owed <- data.frame(car_number = c(1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3),
YearMonth = c("2014-02","2014-05","2014-06","2014-08","2015-06","2015-12","2016-03","2016-04","2016-05","2016-06","2016-07","2016-08","2015-05","2015-08","2015-12","2016-03","2018-01","2018-02","2018-03","2018-04","2018-05","2018-09"),
amount_owed = c(20000,18000,17500,16000,10000,7000,6000,5500,5000,4500,4000,3000,10000,8000,6000,0,50000,40000,35000,30000,25000,15000))
df_repair使用zoo
年-月和tidyverse
,您可以尝试以下方法。使用left\u join
将所有df\u欠下的数据添加到df\u维修
数据中,按车号添加。您可以使用zoo
将年-月列转换为yearmon
对象。然后,从df\u
中按年-月列对行进行排序
对于每个唯一的\u id
(使用group\u by
),您可以创建感兴趣的三列。第一个将使用最新的欠款金额
,其中欠款日期早于服务日期。然后,第二个(3个月)将使用第一个欠款
值,其中欠款日期在服务日期之后3个月(3/12)。最后,最近一次只取所欠金额
中的最后一次
值
使用示例数据,结果略有不同,可能是因为数据帧与文章中的图像不匹配
library(tidyverse)
library(zoo)
df_repair %>%
left_join(df_owed, by = "car_number") %>%
mutate_at(c("YearMonth.x", "YearMonth.y"), as.yearmon) %>%
arrange(YearMonth.y) %>%
group_by(unique_id, car_number) %>%
summarise(
owed_repair_done = last(amount_owed[YearMonth.y <= YearMonth.x]),
owed_3_months = first(amount_owed[YearMonth.y >= YearMonth.x + 3/12]),
owed_most_recent = last(amount_owed)
)
库(tidyverse)
图书馆(动物园)
df_维修%>%
左连接(df\u欠,by=“car\u number”)%>%
在(c(“YearMonth.x”、“YearMonth.y”)、as.yearmon%%>处突变_
安排(年月日)%>%
分组依据(唯一id、车号)%>%
总结(
欠下的修理费=最后一次(欠下的金额[年月.y=年月.x+3/12]),
欠的最近金额=上次(欠的金额)
)
@akrun感谢您的及时回复。缺少了一些逗号,现在应该可以用了