別のオプション:
data %>%
mutate(sum = rowSums(., na.rm = TRUE))
ベンチマーク
library(microbenchmark)
mbm <- microbenchmark(
steven = data %>% mutate(sum = rowSums(., na.rm = TRUE)),
lyz = data %>% rowwise() %>% mutate(sum = sum(a, b, c, na.rm=TRUE)),
nar = apply(data, 1, sum, na.rm = TRUE),
akrun = data %>% mutate_each(funs(replace(., which(is.na(.)), 0))) %>% mutate(sum=a+b+c),
frank = data %>% mutate(sum = Reduce(function(x,y) x + replace(y, is.na(y), 0), .,
init=rep(0, n()))),
times = 10)
#Unit: milliseconds
# expr min lq mean median uq max neval cld
# steven 9.493812 9.558736 18.31476 10.10280 22.55230 65.15325 10 a
# lyz 6791.690570 6836.243782 6978.29684 6915.16098 7138.67733 7321.61117 10 c
# nar 702.537055 723.256808 799.79996 805.71028 849.43815 909.36413 10 b
# akrun 11.372550 11.388473 28.49560 11.44698 20.21214 155.23165 10 a
# frank 20.206747 20.695986 32.69899 21.12998 25.11939 118.14779 10 a
素晴らしいです!ありがとうございました – ckluss
あなたは大歓迎です。私はこれを行うことの最も良い方法を提供しました(私がこれを言うことができれば、それは伝統的な方法でdplyrを使っているという意味で)。しかし、他の基本関数(単独またはdplyrと組み合わせて)を使うことは、私の場合よりもはるかに効率的です。 StevenBeaupreとAkrunの答えはより効率的なので、スピードがあなたにとって重要であるならば、おそらくそれらの方が良いでしょう。 – LyzandeR
@LyzandeR私はOPが 'dplyr'を欲しかったと思う。だから、効率を心配しないでください。 – akrun