データフレームの値の一意の組み合わせと概要値を計算する
-
11-10-2019 - |
質問
のユニークな組み合わせで作業したいと思います var1
と var2
私のデータフレームで:
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
所属していません StackOverflow