在数据框行中循环以创建另一个数据框

Loop in data frames rows to create another data frame

提问人:Matias Ochoa 提问时间:2/9/2023 最后编辑:user438383Matias Ochoa 更新时间:2/10/2023 访问量:74

问:

我有以下数据框:

Loans <- data.frame(
     ID = c("215781","832567","721536"),
     From = c("01-01-2023","04-15-2022","09-23-2021"),
     End = c("05-02-2023","10-15-2023","12-23-2021"),
     Type = c("Monthly","Quarterly","Monthly"))

我需要创建另一个数据框,该数据框对于每个贷款的每个周期内都有一行带有 ID 和日期,我所做的这个循环是不正确的,但可以了解我想做什么。如果您删除循环部分,它适用于 1 行

library(bizdays)

Base <- data.frame("TM",today())

colnames(Base) <- c("TM","InterestDates")



for (i in Loans[i,]){
  
  df <- as.data.frame(seq.Date(Loans$From,Loans$Until,by="month"))
colnames(df) <- "InterestDates"

    
df$TM <- Loans$TM

Base <- rbind(Base,df)


}

像这样的东西将是预期的输出

ID     | InterestDates
250414 | 2022-05-16
250414 | 2022-06-16
250414 | 2022-07-18
250414 | 2022-08-16
R 数据帧 序列

评论


答:

1赞 king_of_limes 2/9/2023 #1

所以我猜你会想要这样的东西:

library(bizdays)

Loans <- data.frame(
  ID = c("215781","832567","721536"),
  From = c("01-01-2023","04-15-2022","09-23-2021"),
  End = c("05-02-2023","10-15-2023","12-23-2021"),
  Type = c("Monthly","Quarterly","Monthly"))

Base <- data.frame("ID" = character(),"InterestDates" = character())

Loans$From <- as.Date(Loans$From,format = "%m-%d-%y")
Loans$End <- as.Date(Loans$End,format = "%m-%d-%y")

for (i in 1:nrow(Loans)){
  
  if(Loans$Type[i] == "Monthly"){
    seq_dates <- seq.Date(Loans$From[i],Loans$End[i],by="month")
  }else if(Loans$Type[i] == "Quarterly"){
    seq_dates <- seq.Date(Loans$From[i],Loans$End[i],by="quarter")
  }

  df <- data.frame("ID" = rep(Loans$ID[i],length(seq_dates)),"InterestDates" = seq_dates)
  
  Base <- rbind(Base,df)
}

原始代码中存在几个问题。

  • Base <- data.frame("TM",today())使 DataFrame 已经包含一个条目,而不是空 DataFrame
  • 数据帧的列和不是命令所需的格式FromEndLoansdateseq.Date
  • 贷款没有列,但我从你的输出中猜测,你无论如何都想要这个列TMID
  • Loans[i,]不起作用,因为不存在 - 您不能通过 定义。请查看循环的工作原理iiiR
  • 循环索引从不在循环中使用。如果需要数据帧列的第 i 个条目,请通过以下方式访问它Loans$From[i]

我也不太确定:您是否想要原始数据帧的每个条目?还是依赖于数据帧的列?by = "month"TypeLoans

评论

0赞 Matias Ochoa 2/10/2023
嗨,KoL,首先,非常感谢您的回答。是的,可悲的是,我对 Loops 的工作原理一无所知,而且我根本不擅长在堆栈中编写问题。关于你的最后一点,是的,每个条目都应该依赖于类型列,但我试图避免使问题变得更大和更复杂。亲切问候!
1赞 king_of_limes 2/10/2023
别担心,我们都是来学习的。编辑了代码,以包含对类型列的依赖关系的 if-else。有更短的方法可以做到这一点,但如果你没有太多不同的条目,这应该可以解决问题。如果有任何不清楚的地方,请随时询问。