在列的数据框中查找相同的观察,但在另一列中查找不同

时间:2016-09-30 04:21:40

标签: r dataframe

在R中,我有一个包含ID列的数据框。我需要找到所有具有相同ID但在X1变量中不同的行。

例如,

d

ID    X1     X2
a    19      F
b    19      F
c    16      T
a    16      T 
a    19      T
d    17      T 
b    15      F 
b    19      F
c    17      T
c    17      T
d    17      T
e    15      T
f    14      T
g    16      T

结果将是:

df1

ID    X1     X2
a    19      F
b    19      F
c    16      T
a    16      T 
b    15      F 
c    17      T

3 个答案:

答案 0 :(得分:3)

t      <- table(d$X1, d$ID)
t[t>1] <- 1
t      <- apply(t,2,sum)
t      <- t[t>1]

d1 <- data.frame(ID = names(t))
d1 <- merge(d1, d, by = "ID", all.x=T,all.y=F)
d1 <- unique(d1[,1:2])
d1
  ID X1
1  a 19
2  a 16
4  b 15
5  b 19
7  c 16
8  c 17

我们也可以包含第3列,但您需要提供一些逻辑来选择要保留的值。例如,有a的值为X1,其中X2为19,其中一个为X2 T,另一个为F.要在2之间进行选择,您可以保留第一个匹配的行String.prototype.replace(),最后一个,或者选择T高于F等等。

答案 1 :(得分:1)

我们可以先删除单个ID。然后计算剩下的ID数。如果还有一个ID,我们将其删除:

newdf <- df1[duplicated(df1$ID, fromLast=TRUE),]
tbl <- table(newdf$ID)
newdf[!newdf$ID %in% names(tbl[tbl < 2]),]
#   ID X1    X2
# 1  a 19 FALSE
# 2  b 19 FALSE
# 3  c 16  TRUE
# 4  a 16  TRUE
# 7  b 15 FALSE
# 9  c 17  TRUE

答案 2 :(得分:0)

这有用吗?

    if(cond) {
    block_if};
    else {
    block_else};