私はTibbleを持っていて、dplyr::rowwise()
とsum()
の組み合わせが機能しないことに気付きました。このトピックには多くのスレッドがあり、2〜3つの解決策がありますが、rowwise()
とsum()
の組み合わせがうまくいかない理由はありません。Tibbleデータ型の行ごとの合計
だから、私の質問です:なぜrowwise()
とsum()
仕事のない組み合わせを行い、我々はそれを動作させるために何ができるのでしょうか?私は初心者ですので、私は以下のコードで何か間違っていると思います。
データ:
dput(data)
structure(list(Fiscal.Year = c(2016L, 2016L, 2016L, 2016L, 2016L,
2016L, 2016L, 2016L, 2016L, 2016L), col1 = c(0, 26613797.764311,
0, 12717073.587292, 0, 0, 0, 0, 0, 0), col2 = c(0, 0, 0, 0, 8969417.89721166,
0, 11483606.8417117, 0, 0, 0), col3 = c(0, 0, 33251606.347943,
0, 25082683.4492186, 0, 17337191.3014127, 0, 0, 0), col4 = c(0,
0, 0, 0, 0, 0, 0, 0, 0, 0), col5 = c(0, 0, 0, 0, 0, 0, 0, 0,
0, 9796823.229998), col6 = c(35822181.695755, 17475066.870565,
0, 0, 0, 0, 4040695.327278, 0, 13117249.623068, 0), col7 = c(0,
0, 0, 0, 0, 18347258.910001, 0, 0, 7002205.087399, 0), No.Trans = c(2987L,
1292L, 1002L, 796L, 691L, 677L, 400L, 388L, 381L, 366L)), .Names = c("Fiscal.Year",
"col1", "col2", "col3", "col4", "col5", "col6", "col7", "No.Trans"
), row.names = c(NA, -10L), class = c("tbl_df", "tbl", "data.frame"
))
このコードは動作しません:
data %>% #No
dplyr::rowwise() %>%
dplyr::mutate(sum = sum(.[2:8]))
ただ、参考のために、私は次のコードのセットを試してみましたが、彼らは仕事します。私は特にrowwise()
とsum()
を使用するソリューションを探しています。
オプション1:Summarise over all columns
data %>%
dplyr::rowwise() %>%
do(data.frame(., res = sum(unlist(.)[2:8])))
オプション2:
rowSums(data[,2:8])
オプション3:How to do rowwise summation over selected columns using column index with dplyr?
012:で議論 で議論オプション4:
data %>%
select(2:8)%>%
dplyr::mutate(sum=rowSums(.))
なぜあなたはこのルートを通過する必要がありますか、投稿に記載されているいくつかの方法と比較して効率的ではありません – akrun
@akrun - ご質問ありがとうございます。 "効率的に"、あなたはベースRのものを参照していますか?初心者として、私は 'dplyr'についての知識が不足していると信じています。したがって、私はエラーを修正する方法を学びたい。これはちょうど私を助けるだろう。 – watchtower
2つのメソッド 'rowSums'と' Reduce'は非常に効率的です – akrun