我有一个数据框,其id列重复,包含网站计数。我想知道只有当Site_Count记录大于0时我才能删除重复的ID记录。
生成DF:
DF <- data.frame(
'ID' = sample(100:300, 100, replace=T),
'Site_count' = sample(0:1, 100, replace=T)
)
我对子集的尝试:
subset(DF[!duplicated(DF$ID),], site_count > 0)
但在这种情况下,它将删除所有0个站点计数 - 我想要子集只在有重复记录超过0站点数时删除记录。
理想的结果看起来像这样(注意站点ID有0个站点计数,但没有重复的ID,0和另一个站点计数):
ID site count
-- ----------
1 0
2 1
3 1
4 0
5 5
答案 0 :(得分:2)
预期产出不是很清楚。可能有帮助:
indx <- with(DF, ave(!Site_count, ID, FUN=function(x) sum(x)>1))
DF[!(duplicated(DF$ID) & indx),]
重新阅读说明后,您的预期答案也可能是:
indx <- with(DF, ave(Site_count, ID, FUN=function(x) any(x>0)))
DF[!(duplicated(DF$ID) & indx),]
答案 1 :(得分:0)
可能是这样的:
set.seed(42)
DF <- data.frame(
'ID' = c(sample(1:3, 10, replace=T), 4),
'Site_count' = c(sample(0:3, 10, replace=T), 0)
)
# ID Site_count
#1 3 1
#2 3 2
#3 1 3
#4 3 1
#5 2 1
#6 2 3
#7 3 3
#8 1 0
#9 2 1
#10 3 2
#11 4 0
fun <- function(x) {
if (length(x) == 1L) return(x) else {
return(x[which.max(x > 0)])
}
}
library(plyr)
ddply(DF, .(ID), summarise, Site_count = fun(Site_count))
# ID Site_count
#1 1 3
#2 2 1
#3 3 1
#4 4 0