1

重複の可能性:
R sum の集計

次のようなデータフレームがあります。

  sample value
1      a     1
2      a     2
3      b     3
4      b     4
5      b     5
6      c     6

sampleすべての s を追加して、(文字ベクトルまたは因子である可能性があります) のレベルでデータ フレームを折りたたむ必要があるvalueため、結果のデータ フレームは次のようになります。

  sample sum
1      a   3
2      b  12
3      c   6

for月曜日の朝、頭に浮かぶのは複雑なループを書くことだけです。apply、plyrなどを使用してこれをベクトル化するにはどうすればよいですか?

4

5 に答える 5

4

私はキャストが好きです。これらのタイプの問題には、迅速で直感的であるためです。

library(reshape2)
dcast(your_df, sample ~ ., sum) # or just cast with the original reshape

このタイプの質問については、要約するのも好きです。

library(plyr) 
ddply(df,.(sample),summarise, sum=sum(value))
于 2012-11-26T14:52:37.870 に答える
4

共有の精神で、sqldfおよびdata.tableパッケージを非常に簡単に使用することもできます。

あなたのデータ:

df <- read.table(text="  sample value
1      a     1
2      a     2
3      b     3
4      b     4
5      b     5
6      c     6",header=TRUE)

別のsqldf方法:

library(sqldf)
sqldf("select sample, sum(value) `value` from df group by sample")
#   sample value
# 1      a     3
# 2      b    12
# 3      c     6

別のdata.table方法:

library(data.table)
DT <- data.table(df, key="sample")
DT[, list(value = sum(value)), by=key(DT)]
#    sample value
# 1:      a     3
# 2:      b    12
# 3:      c     6
于 2012-11-26T16:08:01.240 に答える
1

Rベース関数を使用した1つのソリューションは

aggregate(x = df$value, by = list(df$sample), FUN = sum)

ddplyplyr パッケージからも実行できます

ddply(df,.(sample),numcolwise(sum))

ここdfにあなたのdata.frameがあります

于 2012-11-26T14:58:38.123 に答える