2011-01-14 33 views
2

var1var2というユニークな組み合わせで作業したいと思います。指摘したようにR - ユニークな値の組み合わせで計算する

foo <- data.frame(var1= c(1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4), var2=c(1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 2, 2, 2, 3, 3)) 

、この中unique(foo)結果:ユニークな組み合わせに基づいて

 var1 var2 
1 1  1 
2 2  1 
3 2  2 
4 3  1 
5 3  2 
6 4  2 
7 4  3 

、私はvar1値の出現数と各var1値のvar2の合計を得るのですか値。出力は次のようになります。

 var1 n svar 
1  1  1 1 
2  2  2 3 
3  3  2 3 
4  4  2 5 

編集:延長質問、変更和変数の名前を。

私がしようと、私はよくあなたの質問を理解してほしい
+1

拡張答えをOPの長さを見ていたので、私はここの回答の不一致を信じているQ – Chase

答えて

4

unique(foo)は、あなたがここにいるの後に何を与える必要があります。

Iらaggregate()、他の集約型タスク、またはtapply()の基R同等物のためにライブラリplyrに見てお勧めします。

この演習のための冗長は、ここにあなたがplyrを使用する方法ですが:あなたは、このようなので、同じようVAR2の平均とSDを見つけるなどの機能、任意の数のユニーク置き換えることができ

library(plyr) 
ddply(foo, .(var1), unique) 

注:

ddply(foo, .(var1), summarise, mean = mean(var2), sd = sd(var2)) 

応答

は今、あなたはplyr()のためのより多くの合法的な使用を持って編集します。私たちは、上から学んだことを取る:

plyrと組み合わせる
x <- unique(foo) 

ddply(x, .(var1), summarise, n = length(var2), sum = sum(var2)) 

することで、後にしている何を与える必要があります。

2

unique(foo) 

質問が編集された後:

@Chase、あまりにも非常に単純ではなく、同じを書きません優雅な解決策は次のようになります:

foo$var12 <- paste(foo$var1, foo$var2, sep='|')  # the two variables combined to one 
table(foo$var12)          # and showing its frequencies 

プットはもちろんのテーブルです:

1|1 2|1 2|2 3|1 3|2 4|2 4|3 
    2 2 2 2 3 2 2 
1

答えはあなたが状態より異なりますが、私はあなたの答えを信頼してより多くの私のコードを信頼し、私は、変数「和」の命名の罪をコミットする気になれない。

newfoo <- data.frame(
       var1=unique(foo$var1), 
       n = with(foo, tapply(var2, var1, length)), 
       svar = with(foo, tapply(var2, var1, sum))) 
newfoo 
# var1 n svar 
#1 1 2 2 
#2 2 4 6 
#3 3 5 8 
#4 4 4 10 

EDIT: (の最初のチェイスが私に教えしようと何をしたかを考え出していませんでした。)

newfoo <- data.frame(
        var1=unique(unique(foo)$var1), 
        n = with(unique(foo), tapply(var2, var1, length)), 
        svar = with(unique(foo), tapply(var2, var1, sum))) 

> newfoo 
    var1 n svar 
1 1 1 1 
2 2 2 3 
3 3 2 3 
4 4 2 5 
+0

をあなたのフォローアップに対処するためにオブジェクト 'uniqu e(foo) 'は元のデータフレームではありません。良い点を再:列の名前を "合計"。 – Chase

+0

彼のコードの "foo"は、彼の表形式のプレゼンテーションの "foo"とは違うからだと思います。コードベクトルには "2"が4つありますが、2 "2"が数えられます。 –

+0

最初の表形式のプレゼンテーションは 'foo'ではなく' unique(foo) 'です。下の表の数も 'unique(foo)'を使っています。 – lecodesportif

関連する問題