R Language
列方向の操作
サーチ…
各列の合計
データセットの各列の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/vapply
をlapply/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))
行列の場合、列をループするapply
、 MARGIN = 1
apply
を使用しapply
apply(m1, 2, FUN = sum, na.rm = TRUE)
dplyr
やdata.table
などのパッケージでこれを行う方法があります
library(dplyr)
df1 %>%
summarise_at(vars(matches("^V\\d+")), sum, na.rm = TRUE)
ここでは、 sum
をsummarise_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