我正在尝试使用R中的for循环函数进行解累计操作,因为公司提供的财务信息是针对不同概念进行累加的(这意味着1月份的信息仅属于1月份,2月份的信息是1月份和2月份的总和,3月份的信息是1月份、2月份和3月份的总和等)。
例如,假设我有下面这个数据框:
Concepts <- c("Concept1", "Concept2", "Concept3")
January <- c(5,10,16)
February <- c(9,14,20)
March <- c(16,20,23)
df <- data.frame(Concepts, January, February, March)
这将给我下一个数据框:
Concepts January February March
Concept1 5 9 16
Concept2 10 14 20
Concept3 16 20 23
我需要实现的是下一个数据框(请注意,二月份是二月份和一月份之间的差异,而三月份是二月份和三月份之间的差异):
Concepts January February March
Concept1 5 4 7
Concept2 10 4 6
Concept3 16 4 3
为了得到第二个数据框,我首先创建了一个与df相同行数的空数据框,然后通过for循环将数据框的前两行(因为它们不需要任何处理)cbind在一起,并使用索引添加下一个经过计算的差异值的行。以下是代码示例:
df <- data.frame(Concepts, January, February, March)
df2 <- data.frame(matrix(nrow=nrow(df),ncol=ncol(df))) #Empty Dataframe with the same number of rows
for(i in 1:ncol(df)) {
if(i == 1){
df2 <- cbind(df2, df[ , i])
} else if (i == 2){
df2 <- cbind(df2, df[, i])
} else {
diference <- df[,i] - df[,i-1]
df2 <- cbind(df2,diference)
}
我遇到了以下错误:
我希望得到我的代码纠正或者其他替代方案,以便对多年的数据框进行计算。在
[.data.table
(df, , i) 中出现错误: j (即[...]中的第二个参数) 是一个单一的符号,但是列名“i”不存在。也许你想使用 DT[, ..i]。这种与 data.frame 的差异是有意的,并在常见问题解答1.1中有解释。
df
时,会出现Error in
[.data.frame(df, , ..i) : object '..i' not found
错误。请至少更新您的答案,使其自包含、完整和正确,以便下一个遇到此问题的人可以受益。一旦您发布了一个可行的示例,我们还可以进行速度测试。 - Avraham