我想檢查一個數據幀(「apx」)中是否有任何行,其中來自apx中「AD」列的條目與條目匹配在另一個數據幀(「npx」)的「AD」列中,AND,其中來自匹配行的SD條目在另一個數據幀的13個單位內。根據多個選擇條件匹配的兩個不同數據框中的行建立第三個數據幀
我檢查過幾個不同的參考,但由於我需要建立第三個數據幀(和其他原因),找不到答案。
我的工作試用這個...
npx <- data.frame(TN = c(111, "Z2", 4, "fox", 34256, 4782, "ZGJU45"),
SD=c(100, 200, 100, 600, 500, 115, 455),
AD=c("34YY", "37PD", "123M", "235W", "37PD", "123M", "1WW"))
apx <- data.frame(TN = c(222, "X34", 5, "bear", 47789, 37281, "VF456"),
SD = c(101, 201, 310, 450, 515, 660, 505),
AD = c("123M", "23XY", "5S S", "1WW", "27 30R", "14M", "37PD"))
注:AD輸入 「123M」 「1WW」 和 「37PD」 出現在APX和NPX。第一個和第三個在npx中出現兩次。
投保因素改變字符:
i <- sapply(apx, is.factor)
apx[i] <- lapply(apx[i], as.character)
i <- sapply(npx, is.factor)
npx[i] <- lapply(npx[i], as.character)
我的第五次嘗試...(強制SD條目爲整數)...
test5 <- apx[which(apx$AD == npx$AD &
as.integer(npx$SD) - as.integer(apx$SD) < 13)
%in% as.integer(npx$SD), ]
我的一個較早的嘗試....
test3 <- apx[which(apx$AD == npx$AD &
as.integer(npx$SD) - as.integer(apx$SD) < 13)
%in% setequal(npx$SD, apx$SD), ]
什麼,我在第三個數據幀尋找的是....
TN SD AD
[1] 222 101 123M
因爲123M(apx的第一行)在npx的第三行中找到,SD的對應條目在彼此的13個單元(100和101)內;然而,在第二次出現123M的npx(第六行)中,SD的相應條目之間的差異相距15個單位。實際上,我僅查找那些npx中的SD條目大於(僅)比apx中的相應SD條目更大的實例。
[2] bear 450 1WW
因爲1WW(APX的第四行)的NPX最後一行和用於SD的相應條目中找到的是內13個單位彼此(450和455)的。
[3] VF456 505 37PD
雖然37PD(APX的最後一行)NPX的第二行中被發現,該條目不質量37PD因爲相應的SD值是超過13個單位間隔(200和505);然而,npx(第五行)中37PD的其他外觀的SD的相應條目在彼此的13個單位內,從而限定37PD出現在結果數據幀中。
我在咬牙切齒,期待有人向我展示一種非常簡單的方法來做到這一點,但是比旋轉更多的輪子還要遭受尷尬。提前致謝。