2016-05-19 6 views
0

私は、このように多くの行を持つデータフレームの列を集計する必要があります。データフレームの行を集約するときの優先順位の設定方法は?

x1=c(ID1,1,3,2,1,NA); 
    x2=c(ID1,2,2,3,NA,NA); 

は私が(彼らは同じ最初の要素を持っているとして)マージする2つの行を持っているとしましょう私はそれらの値をマージしたいので、結果はクラッシュの場合(クラッシュ=両方の行が要素に非NA値を持つ)、2番目の要素(つまりx2)の値が高い行の値が優先されます。

ですから、例えば、これらの特定の二列の集計の結果は以下のようになります。

x12=c(ID1,2,2,3,1,NA) 

誰も助けてくださいことはできますか? aggregate()を試しましたが、平均、最大などの要約統計情報しか表示されません。

+0

1つのデータフレームに1つ以上のID1が存在する可能性がありますか?あなたはデータのサンプル(2つのデータフレーム)を与えることができますか? x1とx2を入力と出力のx12または両方のデータフレームの解決策にしたいかどうかは明確ではありません –

+0

あなたがしたいことを表すサンプルデータを提供してください。 2つのdata.framesを行で「マージ」したいが、2つのベクトルしか与えていないとします。最小の例(http://stackoverflow.com/help/mcve)を作成するためのヒントと、[Rの例]を作成するためのヒントについては、以下を参照してください(http://stackoverflow.com/questions/5963269/how-大再現性のある例)。 – lmo

答えて

1

aggregate機能の機能としてmaxを使用できます。

データ:

x1=c('ID1',1,2,1,NA) 
x2=c('ID1',3,3,NA,NA) 

data <- data.frame(rbind(x1, x2), stringsAsFactors = FALSE) 

集計:

aggregate(data[,2:5], by = list(name = data$X1), FUN = max, na.rm = TRUE) 

結果:

name X2 X3 X4 X5 
1 ID1 3 3 1 <NA> 
+0

私は、 "x2ベクトルに非NA値がある場合はその値を保持し、それ以外の場合はx1から値を保持する"という規則に従ってマージしたいと思います。 x1 = c( 'ID1'、3,2,1、NA) x2 = c( 'ID1'、2,3、NA、NA) 'の出力は' x12 = c( ID1,2,3,1、NA) '(私の実際のデータセットはもちろんそれよりはるかに大きい)。 –

+0

まず@lmoのコメントを見て、あなたが探しているものを反映するために元の質問を編集してください。 – elevendollar

0

あなたがパッケージsqldf経由でSQLを使用することができます。

sqlを使用すると、group by IDとselectmaxという値を使用できます。

require(data.table) 
require(sqldf) 
x1 <- c(1,1,2,1,NA) 
x2 <- c(1,3,3,NA,NA) 
x <- data.table(rbind(x1,x2)) 
colnames(x) <- c("ID", "x1", "x2", "x3", "x4") 

sqldf("select ID, max(x1) as x1, max(x2) as x2, max(x3) as x3, max(x4) as x4 from x group by ID") 

    ID x1 x2 x3 x4 
1 1 3 3 1 NA 
関連する問題