在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
答案 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};