[英]Finding difference between two dataframes by a column is not working
我在 newdata 和 olddata 数据框中有两个大型数据集,ID 作为主列键和 30 个其他列。 虽然大多数 ID 在新旧 ID 之间是通用的,但很少有旧 ID 被删除且新 ID 中不存在,反之亦然,新 ID 添加到旧 ID 中不存在。
现在,我正在尝试将 label 归入所有 3 个类别,即普通、新旧和旧,虽然新和普通工作正常,但我在旧的方面并没有那么成功。 不知道我错过了什么,任何指针将不胜感激
commonIDs<-data.frame(intersect(old_data$IDs,new_data$IDs))
#New Ids
added <- NULL
added <- new_data[!new_data$IDs %in% commonIDs$IDs,]
added <- data.frame(Remarks ="New", added)
#Deleted IDs
deleted <- NULL
deleted <- old_data[!old_data$IDs %in% commonIDs$IDs,]
我也尝试了另一种方法,但仍然没有运气
new <- data.frame(new_data[is.na(match(new_data$IDs,commonIDs$IDs)),])
old <- data.frame(old_data[is.na(match(old_data$IDs,commonIDs$IDs)),])
起始数据:
dat <- data.frame(id = 1:10)
dat1 <- dat[-(3:4),,drop=FALSE]
dat2 <- dat[-(6:10),,drop=FALSE]
全连接操作:
merged <- merge(transform(dat1, dat1=T), transform(dat2, dat2=T), by = "id", all = TRUE)
merged
# id dat1 dat2
# 1 1 TRUE TRUE
# 2 2 TRUE TRUE
# 3 3 NA TRUE
# 4 4 NA TRUE
# 5 5 TRUE TRUE
# 6 6 TRUE NA
# 7 7 TRUE NA
# 8 8 TRUE NA
# 9 9 TRUE NA
# 10 10 TRUE NA
所以我们可以很容易地:
with(merged, ifelse(is.na(dat1), "In2", ifelse(is.na(dat2), "In1", "Common")))
# [1] "Common" "Common" "In2" "In2" "Common" "In1" "In1" "In1" "In1" "In1"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.