我正在尝试为一段数据编写一些更简洁/高效的代码。我有一个具有重复数据模式的数据框,请参阅下面的示例。
#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]
,但是有太多的列要使这个简洁,因为我必须多次调用该函数。
我错过了更好的方法吗?
感谢您的帮助。
答案 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
以计算连续列的乘积的列和。