次の要約データセットがあります。
a<-as.data.frame(c(2000:2005))
a$Col1<-c(1:6)
a$Col2<-seq(2,12,2)
colnames(a)<-c("year","Col1","Col2")
for (i in 1:2){
a[[paste("Var_", i, sep="")]]<-i*a[[paste("Col", i, sep="")]]
}
私が使用するVar1とVar2の列を合計したい:
a$sum<-a$Var_1 + a$Var_2
実際には、私のデータセットははるかに大きくなります。Var_1からVar_n(nは20まで)を合計したいと思います。これを行うには、次の方法よりも効率的な方法が必要です。
a$sum<-a$Var_1 + ... + a$Var_n
colSums(a[,c("Var1", "Var2")])
またはrowSums(a[,c("Var_1", "Var_2")])
を使用できます。あなたの場合、後者が必要です。
tidyverse
を使用したソリューションを次に示します。 select()
関数を使用してmutate()
内の適切な列を選択することにより、必要な数の列に拡張できます。
library(tidyverse)
a<-as.data.frame(c(2000:2005))
a$Col1<-c(1:6)
a$Col2<-seq(2,12,2)
colnames(a)<-c("year","Col1","Col2")
for (i in 1:2){
a[[paste("Var_", i, sep="")]]<-i*a[[paste("Col", i, sep="")]]
}
a
#> year Col1 Col2 Var_1 Var_2
#> 1 2000 1 2 1 4
#> 2 2001 2 4 2 8
#> 3 2002 3 6 3 12
#> 4 2003 4 8 4 16
#> 5 2004 5 10 5 20
#> 6 2005 6 12 6 24
# Tidyverse solution
a %>%
mutate(Total = select(., Var_1:Var_2) %>% rowSums(na.rm = TRUE))
#> year Col1 Col2 Var_1 Var_2 Total
#> 1 2000 1 2 1 4 5
#> 2 2001 2 4 2 8 10
#> 3 2002 3 6 3 12 15
#> 4 2003 4 8 4 16 20
#> 5 2004 5 10 5 20 25
#> 6 2005 6 12 6 24 30
reprexパッケージ (v0.2.1)によって2019-01-01に作成