【发布时间】:2016-10-19 14:14:07
【问题描述】:
所以我有两个大的(在某些部分不同的)数据框,第一个名为 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
这也是两个数据帧的 dput:
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))
【问题讨论】:
标签: r