当数据帧中相同的ID(X列)有两倍但关联值不同(Y列)时,有人知道另一种过滤数据的方法吗?
基本上我想知道两个数据帧中的哪一行,然后我想知道两个数据帧中的哪一行都不是(实际上,我想要该特定行的X和Y的值)
提前感谢您的帮助!
io.Reader
答案 0 :(得分:0)
您在这里所做的是过滤x[,1]
中不存在的值。但是,由于其中有4个,因此也会被过滤掉。
相反,我假设您可能要使用dplyr(see the doc here)的setdiff方法
然后使用df2 <- setdiff(x, z)
答案 1 :(得分:0)
我在这里使用累加器添加另一个密钥,以区分your_user
中的重复值
x[,1]
答案 2 :(得分:0)
x <- data.frame(x)
z <- data.frame(z)
x$from <- "x"
z$from <- "z"
df2 <- merge(x, z, by = c("x", "y"), all.x = T)
df2
# x y from.x from.y
# 1 1 1 x z
# 2 2 3 x z
# 3 3 5 x z
# 4 4 7 x z
# 5 4 9 x <NA>
# 6 6 11 x z
# 7 7 13 x z
# 8 8 15 x z
# 9 9 17 x z
# 10 10 19 x z
df2 <- df2[is.na(df2$from.y),]
df2
# x y from.x from.y
# 5 4 9 x <NA>
答案 3 :(得分:0)
要使用@hansjaneinvielleicht方法:
xlist <- paste(x[,1], x[,2])
zlist <- paste(z[,1], z[,2])
setdiff(xlist, zlist)
# [1] "4 9"
答案 4 :(得分:0)
由于我的真正问题不是发布,因为它太复杂了。
基本上,由于我的真实数据帧包含所有数据类型并且具有很多列,因此我无法对实际问题应用任何解决方案。
但是我能够找到一个解决方案,不仅可以解决我的实际问题,而且还可以解决问题中发布的问题,所以我发布答案比解决我的实际问题要大得多,以防万一它对某人有用!
> dup <- which(duplicated(x[,1]) == TRUE)
> ans <- matrix(x[dup,],1,2)
> ans
[,1] [,2]
[1,] 4 9
> # I'm doing this in case the answer was not NA in df2 at the previous step, without
# providing the row "missing"
> df2 <- rbind(df2, ans)
> df2
[,1] [,2]
[1,] 4 9