【发布时间】:2021-04-28 18:58:48
【问题描述】:
我在 newdata 和 olddata 数据框中有两个大型数据集,ID 作为主列键和 30 个其他列。 虽然大多数 ID 在新旧 ID 之间是通用的,但很少有旧 ID 被删除且不存在于新 ID 中,反之亦然,新 ID 被添加到新 ID 中,而旧 ID 中不存在。
现在,我正在尝试将所有 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)),])
【问题讨论】:
-
你的代码看起来不错——你能让你的例子重现吗?你有多确定它不起作用?也许您实际上没有任何旧 ID,这些旧 ID 不存在于
new_data中。 -
附带说明,
added <- NULL和deleted <- NULL不做任何事情 - 您可以删除这些行。 -
快速查看已删除 ID 的方法是
setdiff(old_data$IDs, new_data$IDs)。如果这给出了character(0)或numeric(0)(或任何你的ID 类),那么来自old_data的所有ID 都在new_data中。
标签: r dataframe compare comparison