动态求和多列

时间:2018-07-11 11:36:14

标签: r

嗨,我的数据框有多列,即前5列是我的元数据和 列(列数将是偶数)是需要计算的实际列

公式:(col6 * col9)+(col7 * col10)+(col8 * col11)

country<-c("US","US","US","US")
name <-c("A","B","c","d")
dob<-c(2017,2018,2018,2010)
day<-c(1,4,7,9)
hour<-c(10,11,2,4)
a <-c(1,3,4,5)
d<-c(1,9,4,0)
e<-c(8,1,0,7)
f<-c(10,2,5,6)
j<-c(1,4,2,7)
m<-c(1,5,7,1)
df=data.frame(country,name,dob,day,hour,a,d,e,f,j,m)

如果我有更多列,如何获得最终求和

我尝试使用以下代码

df$final <-(df$a*df$f)+(df$d*df$j)+(df$e*df$m)

2 个答案:

答案 0 :(得分:0)

这是一种泛化计算的方法:

x <- ncol(df) - 5
df$final <- rowSums(df[6:(5 + x/2)] * df[(ncol(df) - x/2 + 1):ncol(df)])

#   country name  dob day hour a d e  f j m final
# 1      US    A 2017   1   10 1 1 8 10 1 1    19
# 2      US    B 2018   4   11 3 9 1  2 4 5    47
# 3      US    c 2018   7    2 4 4 0  5 2 7    28
# 4      US    d 2010   9    4 5 0 7  6 7 1    37

答案 1 :(得分:0)

使用索引的另一种方法:

>start<-6
>amount<-(ncol(df)-start)/2
>df$final<-rowSums(df[start:(start+amount-1)]*df[(start+amount):(start+2*amount-1)])
>df
  country name  dob day hour a d e  f j m final
1      US    A 2017   1   10 1 1 8 10 1 1    19  
2      US    B 2018   4   11 3 9 1  2 4 5    47  
3      US    c 2018   7    2 4 4 0  5 2 7    28  
4      US    d 2010   9    4 5 0 7  6 7 1    37