質問

のユニークな組み合わせで作業したいと思います var1var2 私のデータフレームで:

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

ユニークな組み合わせに基づいて、どうすれば取得できますか:

  • n, 、aの発生数 var1 価値と
  • svar, 、それぞれの合計 var1 価値 var2 値。

出力は次のようになります:

      var1  n    svar
1     1     1    1
2     2     2    3
3     3     2    3
4     4     2    5
役に立ちましたか?

解決

unique(foo) ここであなたが何であるかをあなたに与えるべきです。

更新2014:使用 dplyr それ以外の plyr

ライブラリを調べることをお勧めします plyr 他の集約タイプタスク、またはのベースr同等物の場合 tapply(), aggregate() et al。

この演習では冗長ですが、Plyrを使用する方法は次のとおりです。

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

注記は、var2の平均やSDを見つけるなど、任意の数の関数に一意を置き換えることができます。

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

編集への応答

これで、より正当な用途があります plyr(). 。上から学んだことを取り入れる:

x <- unique(foo)

Plyrと組み合わせて:

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

あなたが望んでいるものをあなたに与えるべきです。

他のヒント

私はあなたの質問をよく理解していることを願っています、試してみてください:

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 

答えはあなたが述べているのとは異なりますが、私はあなたの答えを信頼するよりも私のコードを信頼しています、そして、私は変数の「sum」を命名する罪を犯すことを自分自身に持ち込むことはできません:

 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

編集:(最初はどんなチェイスを理解していなかったか やりました 教えてください。)

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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top