所以我有两个大的(部分不同的)数据框,首先命名为 sifrant ,包括:
IDP PREDMET ID NAME
1 120_1 ustanove _18 Barbara
2 120_1 ustanove _301 Mojca
3 200_1 zakonod _954 Klara
其他数据框架已停止 baza
predmet sifpredm izvajalec1 sifizv1 izvajalec2 sifizv2 izvajalec3 sifizv3 izvajalec4 sifizv4 izvajalec5 sifizv5
ustanove 120_1 Barbara _18 Mojca _301 Klara _954 -2 -2 -2 -2
ustanove 120_1 Barbara _18 Mojca _301 -2 -2 -2 -2 -2 -2
Boath数据框在下一列中应具有相同的值:IDP==sifpredm
和ID==sifizv1, siizv2, sifizv3, and so on
。
现在我想匹配这些专栏
IDP with sifpredm
和
ID with sifizv1 and sifizv2 and sifizv3
等等。
基于匹配,我想打印 sifrant 中没有匹配的IDP, ID and NAME
(即,在sifrant中缺少并且在baza中存在)
比较两个数据框我可以看到在数据框sifrant
讲师Klara缺少IDP 120_1。所以我的输出应该打印哪个sifpredm,sifizv和izvajalec在baza
但不在sifrant
。在我的情况下, sifrant 缺少ID号为120_1的课程,讲师ID号为_954,讲师名称为Klara
到目前为止,我已经尝试了
merge(sifrant, baza, by.x = "IDP",by.y="sifpredm" , all = T)
和
require(sqldf)
sifrantNotInbaza <- sqldf('SELECT * FROM baza EXCEPT SELECT * FROM sifrant')
和
library(diffobj)
install.packages("diffobj")
diffPrint(sifrant, baza)
diffObj(sifrant, baza)
我也看过这里
Compare two data.frames to find the rows in data.frame 1 that are not present in data.frame 2
这也是两个数据帧的输入:
structure(list(IDP = c("120_1", "120_1"), PREDMET = c("ustanove",
" ustanove"), ID = c("_18", "_301"), NAME = c("Barbara", "Mojca "
)), .Names = c("IDP", "PREDMET", "ID", "NAME"), class = "data.frame", row.names = c(NA,
-2L))
structure(list(predmet = c("ustanove", "ustanove"), sifpredm = c("120_1",
"120_1"), izvajalec1 = c("Barbara ", "Barbara "), sifizv1 = c("_18",
"_18"), izvajalec2 = c("Mojca ", "Mojca "), sifizv2 = c("_301",
"_301"), izvajalec3 = c("Klara ", "-2"), sifizv3 = c("_954",
"-2"), izvajalec4 = c(-2L, -2L), sifizv4 = c(-2L, -2L), izvajalec5 = c(-2L,
-2L), sifizv5 = c(-2L, -2L)), .Names = c("predmet", "sifpredm",
"izvajalec1", "sifizv1", "izvajalec2", "sifizv2", "izvajalec3",
"sifizv3", "izvajalec4", "sifizv4", "izvajalec5", "sifizv5"), class = "data.frame", row.names = c(NA,
-2L))
答案 0 :(得分:1)
我认为您需要纠正您的sifrant的输入。我复制了你在描述中的表格。 然后我会做类似的事情:
library(tidyverse)
baza2 <- baza %>%
gather(contains("sifizv"),
key = "sifizv",
value = "ID"
) %>%
select(1:2,ID) %>%
unique()
output <- anti_join(baza2, sifrant, by = c("sifpredm" = "IDP", "ID"))
这会告诉您失踪者的身份证明。然后,您可以使用match
或:
left_join(output, sifrant) %>% select(sifpredm, predmet, ID, NAME)