web-dev-qa-db-ja.com

Rの複数の列で効率的に合計する

次の要約データセットがあります。

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
14
user2568648

colSums(a[,c("Var1", "Var2")])またはrowSums(a[,c("Var_1", "Var_2")])を使用できます。あなたの場合、後者が必要です。

15
psoares

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に作成

9
Matt Dancho