サーチ…


各列の合計

データセットの各列のsumを計算する必要があるとします

set.seed(20)
df1 <- data.frame(ID = rep(c("A", "B", "C"), each = 3), V1 = rnorm(9), V2 = rnorm(9))
m1 <- as.matrix(df1[-1])

これを行うには多くの方法があります。 base Rを使用すると、最良のオプションはcolSums

colSums(df1[-1], na.rm = TRUE)

ここでは、最初の列を非数値として削除し、各列のsumを行い、 na.rm = TRUE (データセットにNAsがある場合)を指定して、

これはmatrixも動作します

colSums(m1, na.rm = TRUE)

これはループでlapply/sapply/vapplylapply/sapply/vapply行うことができます

 lapply(df1[-1], sum, na.rm = TRUE)

出力はlistであることに留意すべきである。 vector出力が必要な場合

 sapply(df1[-1], sum, na.rm = TRUE)

または

 vapply(df1[-1], sum, na.rm = TRUE, numeric(1))

行列の場合、列をループするapplyMARGIN = 1 applyを使用しapply

 apply(m1, 2, FUN = sum, na.rm = TRUE)

dplyrdata.tableなどのパッケージでこれを行う方法があります

 library(dplyr)
 df1 %>%
     summarise_at(vars(matches("^V\\d+")), sum, na.rm = TRUE)

ここでは、 sumsummarise_atするために必要な列名と一致する正規表現を渡しています。正規表現は、 Vで始まり、その後に1つ以上の数字( \\d+ )が続くすべての列と一致します。

data.tableオプションは次のdata.tableです。

library(data.table)   
setDT(df1)[, lapply(.SD, sum, na.rm = TRUE), .SDcols = 2:ncol(df1)]

私たちは、「data.table」(に「data.frame」に変換setDT(df1) 、)で関数を適用する列を指定.SDcols Data.table(のサブセットを通って、ループ.SD )とget sum


操作でグループを使用する必要がある場合は、グループを列/列で指定することで簡単に行うことができます

 df1 %>%
   group_by(ID) %>%   
   summarise_at(vars(matches("^V\\d+")), sum, na.rm = TRUE)

すべての列のsumが必要な場合は、 summarise_each代わりにsummarise_at使用できます

df1 %>%
    group_by(ID) %>%
    summarise_each(funs(sum(., na.rm = TRUE)))

data.tableオプションは次のdata.tableです。

setDT(df1)[, lapply(.SD, sum, na.rm = TRUE), by = ID]   


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow