2つのデータフレームがあります。私は、最初の2つの列間と一致しなければならないnndf
とtndf
、私は第3列の値が同じであるかどうかチェックし、第三のデータフレームを更新する必要が一致がある場合。問題はnndf
より長いですtndf
。
nndf <- data.frame("var1" = c("ABC","ABC","DEF", "FED","DGS"), "var2" = c("xyz","abc","def","dsf","dsf"), "var3" = c(1234.21,3432.12,0.12,1232.44,873.00))
tndf <- data.frame("var1" = c("ABC","ABC","DEF"), "var2" = c("xyz","abc","def"), "var3" = c(1234.21,3432.12,0.11))
ndf <- data.frame("var1" = c("ABC","ABC"), "var2" = c("xyz","abc"))
3番目のデータフレームに結果を入力したいと思います。このデータフレームは、最初の2列から共通の値をとるnndf
とtndf
、それらは第3列の共通チェックどこ1234.21
と3432.12
、値が同じである場合、それはTRUEを返し、カラムを充填します。必要な出力は
var1 var2 var3
ABC xyz TRUE (indicating 1234.21 and 1234.21 in first two df are same)
ABC abc TRUE
DEF def FALSE (indicating 0.12 is not equal to 0.11)
使ってみましたforloop + if condition
。ただし、各行を複数回繰り返し、結果を入力します。
を使用%in%
しbase R
て論理ベクトルを作成できます
tndf$var3 <- do.call(paste, tndf) %in% do.call(paste, nndf)
tndf
# var1 var2 var3
#1 ABC xyz TRUE
#2 ABC abc TRUE
#3 DEF def FALSE
または結合を使用する
library(data.table)
setDT(tndf)[nndf, var3n := var3 == i.var3, on = .(var1, var2)]
tndf[, .(var1, var2, var3 = var3n)]
# var1 var2 var3
#1: ABC xyz TRUE
#2: ABC abc TRUE
#3: DEF def FALSE
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加