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

w8ntj3qf  于 2023-02-10  发布在  其他
关注(0)|答案(1)|浏览(137)

我得到了下面的数据框:

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
bxjv4tth

bxjv4tth1#

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

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(),"InterestDate" = 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)){
  
  seq_dates <- seq.Date(Loans$From[i],Loans$End[i],by="month")
  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
  • Loans Dataframe 的列FromEnd不是seq.Date命令所需的date
  • 贷款没有TM列,但我从输出中猜测,您无论如何都需要ID
  • Loans[i,]不起作用,因为i不存在-不能通过i定义i。请研究循环在R中的工作方式
  • 循环索引永远不会在循环中使用。如果需要 Dataframe 列的第i个条目,请通过Loans$From[i]访问它

我也不太确定:您是否希望原始 Dataframe 的每个条目都使用by = "month"?还是依赖于Loans Dataframe 的Type列?

相关问题