2

複数の因子(キー)変数に基づいて、メインデータセットとルックアップテーブルの2つのデータフレームをマージしています。メインデータ内のこれらのキー変数のどの組み合わせがそうでなかったかをすばやく確認したいと思います。ルックアップテーブルで一致します。これを可能にするマージ関数のオプションはありますか?現時点で考えられる最善の方法は、all.x = Tオプションを使用してから、マージした変数の1つがNAである行を確認することです。確かにもっと良い方法があるはずです...

これが私のコードです、それが価値があるもののために:

a.lighting.all.2 <- merge(a.lighting.all.2, a.lookup.by.meas.2,
                          by = c("measure.category", "measure.subcategory",
                                 "measure", "fund.category"))
4

3 に答える 3

3

私が見る限り、マージにはこのオプションはありませんが、NAによるサブセット化は非常に迅速で簡単です。

df      <- data.frame(cat=c("a","a","b","b"),num=(1:4))
df2     <- data.frame(cat=c("a","a","b","c"),num=(1:4))
mergedf <- merge(df,df2,by="cat",all=TRUE)
mergedf
mergedf [rowSums(is.na(mergedf))>0 ,] # not if you have NAs already before merge

次のようなこともできます。

df2 [ !df2$cat %in% df$cat ,]

マージされていない特定の行の場合:

df$ID   <- 1:length(df[,1])
df2$ID  <- (length(df[,1])+1):(length(df[,1])+length(df2[,1]))
mergedf <- merge(df,df2,by="cat", all=FALSE)

df2 [!df2$ID %in% mergedf$ID.y ,]

データの例で、おそらく誰かがはるかに良く助けることができます

于 2012-09-24T22:44:44.350 に答える
2

data.tableバージョン:

library(data.table)
df1      <- data.table(cat=c("a","a","b","b"),num=(1:4))
   cat num
1:   a   1
2:   a   2
3:   b   3
4:   b   4

df2     <- data.table(cat=c("a","a","b","c"),num=(1:4))
   cat num
1:   a   1
2:   a   2
3:   b   3
4:   c   4

df1[!df2, on=.(cat,num)]
   cat num
1:   b   4

df2[!df1, on=.(cat,num)]
   cat num
1:   c   4

または、キーを設定し、角かっこ内のオンを削除します。

于 2019-12-22T14:43:35.643 に答える
1

同一のヘッダーを持つ2つのdata.frameを差分するための関数は次のとおりです。

df.diff <- function(df1, df2) {
   is.dup <- duplicated(rbind(df2, df1))
   is.dup <- tail(is.dup, nrow(df1))
   df1[!is.dup, ]
}

だからあなたは実行することができます:

df.diff(main[by.cols], lookup[by.cols])
于 2012-09-25T00:52:09.067 に答える