我試圖將資料框架d1中的2列與資料框架d2中的2列逐行進行比較。為了說明這個問題,我創建了假的資料集:
d1 <- data.frame()
a = c(1。 2,3),
b = c(4。 5,6)
)
d2 <- data.frame()
a = c(2。 0,2),
b = c(5。 5,6)
)
事實上,我想標記d1中的所有行,因為我可以在d2的至少一行中找到一個匹配的行,所以想要的結果是:
data.frame()
a = c(1。 2,3),
b = c(4。 5,6),
flag = c(0。 1,0)
)
這是我所嘗試的:
這是我所嘗試的。
for (i in 1: nrow(d1)) {
for (j in 1: nrow(d2)) {
test[i, j] = ifelse(d1$a[/span>i] == d2$a[j] & d1$b[i] $b[i] == d2$b[j]。 1, 0)
}
}
一個for回圈將是最好的解決方案
。uj5u.com熱心網友回復:
你基本上是在尋找一種連接的方式。對于這個特殊的任務,僅僅是標記,data.table在這里的就地連接和更新是非常整潔的
library(data.table)
d1 <- data.table()
a = c(1。 2,3),
b = c(4。 5,6)
)
d2 <- data.table()
a = c(2。 0,2),
b = c(5。 5,6)
)
#給每個匹配的地方分配1
d1[d2,
on =.(a,b),/span>
flag := 1]
d1
#> a b flag
#> 1: 1 4 NA
#> 2: 2 5 1
#> 3: 3 6 NA
#轉換NA為0
d1[是。 na(flag), flag : = 0]/span>
d1
#> a b flag
#> 1: 1 4 0
#> 2: 2 5 1
#> 3: 3 6 0
uj5u.com熱心網友回復:
你可以使用match來做這個:
d1$flag < -匹配(paste0(d1$a。 d1$b)。 paste0(d2$a, d2$b)。 nomatch = 0)
編輯。@mnist提出了一個合理的觀點。這里有一個對NA行更安全的替代方案:
d1$flag <- as. numeric(duplicated(rbind(d2, d1)))[-seq_len(nrow(d1))】
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/312047.html
標籤:
上一篇:Pandas回圈問題
