3

次のデータ フレームがあるとします。

dd <- data.frame(x1 = c(1, 2, 3), x2 = c(3, 4, 5), x3 = (5, 6, 7))

次のように、新しい列を作成したいと思います。

dd$x.sum <- dd$x1 + dd$x2 + dd$x3

しかし、足し算を書き出す代わりに (x1, x2, ..., x100合計したい列が実際に 100 個あるとします)、プログラムで書きたいと思います。何かのようなもの:

dd$x.sum <- sum(sapply(1:3, function(i) { 
                              return(dd[paste0("x", i)]) 
                            }))

それがうまくいかないことを除いて。

どうすればいいですか?

4

2 に答える 2

5

Reducewith を使用することもできますが、これには 引数+がありませんna.rm

dd <- data.frame(matrix(runif(1e6),ncol=1000))

dd$sum <-     Reduce('+', dd[paste0('X',seq_len(1000))])


# some benchmarking
xx <- paste0("X", seq_len(1000))
library(microbenchark)
microbenchmark(Reduce('+', dd[xx]), rowSums(dd[xx]))
## Unit: milliseconds
##                expr      min       lq   median       uq      max neval
## Reduce("+", dd[xx]) 14.93642 15.19713 15.56077 15.78606 31.92162   100
##    rowSums(dd[xx]) 30.79629 31.44574 31.67192 32.14342 58.07938   100
于 2013-04-09T04:28:32.647 に答える