簡體   English   中英

在一個 dataframe 中創建一個列,基於另一個 dataframe 在 R 中的另一列

[英]Create a column in one dataframe based on another column in another dataframe in R

我對 R 和 DPLYR 相當陌生,我被困在這個問題上:

我有兩張桌子:

(一)汽車維修

在此處輸入圖像描述

(2) 每輛車的欠款隨着時間的推移

在此處輸入圖像描述

我想做的是在維修表上創建三個額外的列,這給了我:(1)維修完成時欠汽車的金額,(2)3個月的路和(3)最后的付款記錄文件。

如果維修日期與任何付款記錄不匹配,我需要使用記錄中最接近的欠款金額。

所以像:

在此處輸入圖像描述

任何想法我該怎么做?

以下是數據框:

汽車維修:

 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))

使用zoo for year-month 和tidyverse ,您可以嘗試以下操作。 使用left_join將所有df_owed數據添加到您的df_repair數據中,按car_number 您可以使用zoo將年月列轉換為yearmon對象。 然后,按df_owed中的年月列對行進行排序。

對於每個unique_id (使用group_by ),您可以創建您感興趣的三列。 第一個將使用最新的amount_owed ,其中欠款日期早於服務日期。 然后第二個(3 個月)將使用第一個amount_owed值,其中欠款日期比服務日期晚 3 個月(3/12)。 最后,最近的只是從amount_owed中獲取的last值。

使用示例數據,結果略有不同,可能是由於數據幀與帖子中的圖像不匹配。

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)
  )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM