5

私はRで「条件付き左結合」を数回行っていることに気づきました。例を挙げて説明します。次のような2つのデータフレームがある場合:

> df
    a b
  1 1 0
  2 2 0

> other.df
    a b
  1 2 3

目標は、このデータフレームで終わることです。

> final.df
    a b
  1 1 0
  2 2 3

私がこれまでに書いたコード:

c <- merge(df, other.df, by=c("a"), all.x = TRUE)
c[is.na(c$b.y),]$b.y <- 0
d<-subset(c, select=c("a","b.y"))
colnames(d)[2]<-b

最終的に私が望んでいた結果で到着しました。

これを効果的に4行で行うと、コードが非常に不透明になります。これを行うためのより良い、より面倒な方法はありますか?

4

2 に答える 2

1

これが2つの方法です。どちらの場合も、最初の行は左マージを実行して、必要な列を返します。この場合merge、名前を設定する必要があります。両方の行の最後の行は、NAsを。に置き換え0ます。

マージ

res1 <- merge(df, other.df, by = "a", all.x = TRUE)[-2]
names(res1) <- names(df)
res1[is.na(res1)] <- 0

sqldf

library(sqldf)
res2 <- sqldf("select a, o.b from df left join 'other.df' o using(a)")
res2[is.na(res2)] <- 0
于 2012-07-10T22:53:30.323 に答える
0

2行で:

c <- merge(df, other.df,all=T)
c=c[which(!duplicated(c$a)),]

したがって、これは両方のデータセットから値を取得し、2番目のデータセットからIDが重複している行を省略します。どちらが残っているのか、どちらが正しいのかわからないので、もう一方が必要な場合は、データを上下逆にして同じことを行います。

c=c[length(c$a):1,]
c=c[which(!duplicated(c$a)),]
于 2012-07-06T21:48:23.417 に答える