R中的自动迭代计算
Automatic iterative calculation in R
朋友们下午好!
我目前正在用 R 执行一些财务计算(代码如下所示)。我的目标是在给定各种(但已知)日期的情况下获得不同的“结果”。
比如这些计算是根据31.12.19(我们在subset函数里面选择列名“Main_Debt_As_Of_31.12.19”可以看到的),“2019-12-31”和“2020” -12-31".
testdf <- subset(df, df$Main_Debt_As_Of_31.12.19 > 0)
testdf2 <- subset(testdf, (testdf$Earliest_Date > "2019-12-31" | is.na(testdf$Earliest_Date)))
testdf3 <- subset(testdf, testdf$Earliest_Date > "2019-12-31" & testdf$Earliest_Date <= "2020-12-31")
Result <- sum(testdf3$Main_Debt_As_Of_31.12.19, na.rm = TRUE) / sum(testdf2$Main_Debt_As_Of_31.12.19, na.rm = TRUE)
我的问题是:如果我创建一个包含我想使用的列名和日期的向量(见下文),是否可以自动执行我的代码以避免手动复制和更改名称和日期三次(在真正的任务我应该改120次)。
vector1 <- c(Main_Debt_As_Of_31.10.19, Main_Debt_As_Of_30.11.19, Main_Debt_As_Of_31.12.19)
vector2 <- c("2019-10-31", "2019-11-30", "2019-12-31")
vector3 <- c("2020-10-31", "2020-11-30", "2020-12-31")
我只希望 R 使用我的向量(或列表)中的不同值,运行 具有新输入的代码并在新向量中显示计算结果..
非常感谢!
将mapply
与辅助函数calc
结合使用。
calc <- function(col, date1, date2, data){
i <- data[[col]] > 0
j <- data[["Earliest_Date"]] > date1 | is.na(data[["Earliest_Date"]])
k <- data[["Earliest_Date"]] > date1 & data[["Earliest_Date"]] <= date2
Main_Debt2 <- data[i & j, col, drop = TRUE]
Main_Debt3 <- data[i & k, col, drop = TRUE]
sum(Main_Debt3, na.rm = TRUE)/sum(Main_Debt2, na.rm = TRUE)
}
vector1 <- c("Main_Debt_As_Of_31.10.19", "Main_Debt_As_Of_30.11.19", "Main_Debt_As_Of_31.12.19")
vector2 <- c("2019-10-31", "2019-11-30", "2019-12-31")
vector3 <- c("2020-10-31", "2020-11-30", "2020-12-31")
mapply(calc, vector1, vector2, vector3, MoreArgs = list(data = df))
朋友们下午好!
我目前正在用 R 执行一些财务计算(代码如下所示)。我的目标是在给定各种(但已知)日期的情况下获得不同的“结果”。
比如这些计算是根据31.12.19(我们在subset函数里面选择列名“Main_Debt_As_Of_31.12.19”可以看到的),“2019-12-31”和“2020” -12-31".
testdf <- subset(df, df$Main_Debt_As_Of_31.12.19 > 0)
testdf2 <- subset(testdf, (testdf$Earliest_Date > "2019-12-31" | is.na(testdf$Earliest_Date)))
testdf3 <- subset(testdf, testdf$Earliest_Date > "2019-12-31" & testdf$Earliest_Date <= "2020-12-31")
Result <- sum(testdf3$Main_Debt_As_Of_31.12.19, na.rm = TRUE) / sum(testdf2$Main_Debt_As_Of_31.12.19, na.rm = TRUE)
我的问题是:如果我创建一个包含我想使用的列名和日期的向量(见下文),是否可以自动执行我的代码以避免手动复制和更改名称和日期三次(在真正的任务我应该改120次)。
vector1 <- c(Main_Debt_As_Of_31.10.19, Main_Debt_As_Of_30.11.19, Main_Debt_As_Of_31.12.19)
vector2 <- c("2019-10-31", "2019-11-30", "2019-12-31")
vector3 <- c("2020-10-31", "2020-11-30", "2020-12-31")
我只希望 R 使用我的向量(或列表)中的不同值,运行 具有新输入的代码并在新向量中显示计算结果..
非常感谢!
将mapply
与辅助函数calc
结合使用。
calc <- function(col, date1, date2, data){
i <- data[[col]] > 0
j <- data[["Earliest_Date"]] > date1 | is.na(data[["Earliest_Date"]])
k <- data[["Earliest_Date"]] > date1 & data[["Earliest_Date"]] <= date2
Main_Debt2 <- data[i & j, col, drop = TRUE]
Main_Debt3 <- data[i & k, col, drop = TRUE]
sum(Main_Debt3, na.rm = TRUE)/sum(Main_Debt2, na.rm = TRUE)
}
vector1 <- c("Main_Debt_As_Of_31.10.19", "Main_Debt_As_Of_30.11.19", "Main_Debt_As_Of_31.12.19")
vector2 <- c("2019-10-31", "2019-11-30", "2019-12-31")
vector3 <- c("2020-10-31", "2020-11-30", "2020-12-31")
mapply(calc, vector1, vector2, vector3, MoreArgs = list(data = df))