1

私はデータセットを持っています(テスト)

v1 v2  v3  v4  v5  v6
1   1   1   0   0   0 
2   2   1   1   0   0 
3   2   1   0   0   0 
4   3   1   0   0   0 
5   3   1   1   0   1 
6   3   1   0   1   1 

structure(list(V1 = 1:6, V2 = c(1L, 2L, 2L, 3L, 3L, 3L), V3 = c(1L, 
1L, 1L, 1L, 1L, 1L), V4 = c(0L, 1L, 0L, 0L, 1L, 0L), V5 = c(0L, 
0L, 0L, 0L, 0L, 1L), V6 = c(0L, 0L, 0L, 0L, 1L, 1L)), .Names = c("V1", 
"V2", "V3", "V4", "V5", "V6"), class = "data.frame", row.names = c(NA, 
-6L))

そして私はこれを達成したい

v1  v2  v3  v4  v5  v6
 1   1   1   0   0   0  
 5   2   2   1   0   0  
15   3   3   1   1   2  

私はこれを試しました:

aggregate(test[c('v3', 'v4', 'v5','v6')], list('v2'), FUN=sum, na.rm=TRUE)

動作していません。V2に基づいて(テスト)のデータを集計し、他の変数を合計したいと思います。

4

2 に答える 2

6

aggregateコマンドを次のように変更します。

aggregate(. ~ V2, test, sum)
#   V2 V1 V3 V4 V5 V6
# 1  1  1  1  0  0  0
# 2  2  5  2  1  0  0
# 3  3 15  3  1  1  2

注意すべき点:

  1. Rでは大文字と小文字が区別されます。提供したサンプルデータには大文字の「V」で名前が付けられた変数がありますが、試したサンプルコードには小文字の「v」があります。
  2. 変数名を直接参照しようとしています。そのためには、の数式表記を使用するか、または(非推奨)aggregate()を使用する必要があります。with()attach()
于 2013-01-23T16:12:55.187 に答える
1

あなたの最初の試みはほとんど正しかった。マイナーな修正で、あなたはあなたが望むものを達成することができます。これは、V2までに行を集計合計することを前提としています

result <- aggregate(test[,c('V1', 'V3', 'V4', 'V5','V6')], list(test[,'V2']), FUN=sum, na.rm=TRUE)

> names(result) <- gsub("Group.1", "V2", names(result))
> result
  V2 V1 V3 V4 V5 V6
1  1  1  1  0  0  0
2  2  5  2  1  0  0
3  3 15  3  1  1  2
于 2013-01-23T16:17:49.270 に答える