筛选具有相同ID的R中的数据,并确定两个数据帧中的行以及两个数据帧中的行都不

时间:2019-01-05 00:45:12

标签: r dataframe filtering

当数据帧中相同的ID(X列)有两倍但关联值不同(Y列)时,有人知道另一种过滤数据的方法吗?

基本上我想知道两个数据帧中的哪一行,然后我想知道两个数据帧中的哪一行都不是(实际上,我想要该特定行的X和Y的值)

提前感谢您的帮助!

io.Reader

5 个答案:

答案 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