按整数推进数据框计算

时间:2018-06-04 18:14:07

标签: r for-loop

我正在尝试为一段数据编写一些更简洁/高效的代码。我有一个具有重复数据模式的数据框,请参阅下面的示例。

#Simple Sample Data
 Date_2012<-c(NA,NA,NA)
 X2<-c(1,1,1)
 X3<-c(2,2,2)
 XNA<-c(NA,NA,NA)
 Date_2013<-c(NA,NA,NA)
 X6<-c(3,3,3)
 X7<-c(4,4,4)
 df<-data.frame(Date_2012,X2,X3,XNA,Date_2013,X6,X7)

> df
  Date_2012 X2 X3 XNA Date_2013 X6 X7 XNA
1        NA  1  2  NA        NA  3  4 NA
2        NA  1  2  NA        NA  3  4 NA
3        NA  1  2  NA        NA  3  4 NA

我想用X2&amp; amp;做一些计算X3然后前进到X6&amp; X7并做同样的计算。用于计算的这些列将始终是彼此远离的设定数字,我想知道如何使用它来推进计算,无论是for循环还是其他东西。

#Calcuations, how to make this efficient? (loop?)
Calc<-df[,2]*df[,3]
Total2012<-sum(Calc)

Calc2<-df[,6]*df[,7]
Total2013<-sum(Calc2)

#Then continuously update the "Totals"     
Totals<-c(Total2012,Total2013)

# Desired Result
> Totals
[1]  6 36 #.......... with results being added until columns exhausted

总体而言,我想继续推进数据框(可能是整数?)并在更新总计列表时进行这些计算,我将如何有效地做到这一点?

我想过使用一个函数来控制df[A]*df[b],但是有太多的列要使这个简洁,因为我必须多次调用该函数。

我错过了更好的方法吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

我们可以使用sapply执行类似的操作:

Totals = sapply((1:ncol(df))[c(FALSE, TRUE, FALSE, FALSE)], 
                function(x) sum(df[,x]*df[,x+1]))

# [1]  6 36

这会创建一系列列索引,这些列索引将输入sapply以计算连续列的乘积的列和。