簡體   English   中英

您如何在R中進行條件“左連接”?

[英]How do you do conditional “left join” in R?

我發現自己在R中多次進行了“條件左連接”。 如果您有兩個數據框,例如:

> 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

最終達到我想要的結果。

有效地執行四行代碼會使代碼非常不透明。 有沒有更好,更省事的方法呢?

這有兩種方法。 在這兩種情況下,第一行都進行左合並,返回所需的列。 merge的情況下,我們必須設置名稱。 兩行的最后一行將NA替換為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

在兩行中:

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

因此,這將從兩個數據集中獲取值,並省略第二個ID重復的行。 我不確定哪一個是正確的,所以如果您想要另一個:將數據上下顛倒並做同樣的事情。

c=c[length(c$a):1,]
c=c[which(!duplicated(c$a)),]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM