「まったく」同じ2つのデータフレームがあります。それらの違いは、1 つには 676 の観測 (行) があり、2 つ目には 666 の観測があることです。これらの行のどれが 2 番目のデータフレームで欠落しているかわかりません。
見逃された10行で3番目のデータフレームを作成する方法を誰かが私にコードを示すことができれば、私にとって最も簡単です。
データフレームの名前: - dataset1 (676) - dataset2 (666)
どうも。
「まったく」同じ2つのデータフレームがあります。それらの違いは、1 つには 676 の観測 (行) があり、2 つ目には 666 の観測があることです。これらの行のどれが 2 番目のデータフレームで欠落しているかわかりません。
見逃された10行で3番目のデータフレームを作成する方法を誰かが私にコードを示すことができれば、私にとって最も簡単です。
データフレームの名前: - dataset1 (676) - dataset2 (666)
どうも。
dataset1[tail(!duplicated(rbind(dataset2, dataset1)), nrow(dataset1)), ]
アプローチは次のとおりです。
library(qdap)
## generate random problem
prob <- sample(1:nrow(mtcars), 1)
## remove the random problem row
mtcars2 <- mtcars[-prob, ]
## Throw it into a list of 2 dataframes so they're easier to work with
dat <- list(mtcars, mtcars2)
## Use qdap's `paste2` function to paste all columns together
dat2 <- lapply(dat, paste2)
## Find the shorter data set
wmn <- which.min(sapply(dat2, length))
## Add additional element to shorter one
dat2[[wmn]] <- c(dat2[[wmn]], NA)
## check each element of the 2 pasted data sets for equality
out <- mapply(identical, dat2[[1]], dat2[[2]])
## Which row's the problem
which(!out)[1]
which(!out)[1] == prob
which(!out)[1]
等しい場合の問題NA
は最後の行にあります。
見始めるFALSE
と、そこに問題があります。
編集for
:ループを削除しました
使用merge
してみて、マージ結果に値がある場所を探しNA
ます。
ダミーデータを使用した例を次に示します。
set.seed(1)
df1 <- data.frame(x=rnorm(100),y=rnorm(100))
df2 <- df1[-sample(1:100,10),]
dim(df1)
# [1] 100 2
dim(df2)
# [1] 90 2
out <- merge(df1,df2,by='x',all.x=TRUE)
in1not2 <- which(is.na(out$y.y))
in1not2
# [1] 6 25 33 51 52 53 57 73 77 82
次に、次を抽出できます。
> df1[in1not2,]
x y
6 -0.8204684 1.76728727
25 0.6198257 -0.10019074
33 0.3876716 0.53149619
51 0.3981059 0.45018710
52 -0.6120264 -0.01855983
53 0.3411197 -0.31806837
57 -0.3672215 1.00002880
73 0.6107264 0.45699881
77 -0.4432919 0.78763961
82 -0.1351786 0.98389557