数据概述:
> str(dataStart[c("gvkey","DEF","FittedRob","NewCol")])
'data.frame': 1000 obs. of 4 variables:
$ gvkey : int 1004 1004 1004 1004 1004 1021 1021 1021 1021 1033 ...
$ DEF : int 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0...
$ FittedRob : num 0.549 0.532 0.519 0.539 0.531 ...
$ NewCol : chr 0.549 "Del" 0.519 0.539 "Del2" ...
现在,我想删除发生“Del”或“Del2”的所有行以及给定“gvkey”的行。
dataStart <- NewDataFrame[ ! NewDataFrame$NewCol %in% c("Del","Del2"),]
其中NewDataFrame是包含NewCol的data.frame。然而,这只删除出现“Del”和“Del2”的行,如果出现“Del”或“Del2”,我想删除整个“gvkey”。谢谢。
答案 0 :(得分:3)
首先,您必须选择要删除的所有gvkey
:
keys_to_delete <- unique(NewDataFrame$gvkey[NewDataFrame$NewCol %in%
c("Del","Del2")])
然后使用这些删除相应的行:
dataStart <- NewDataFrame[!(NewDataFrame$gvkey %in% keys_to_delete), ]
答案 1 :(得分:1)
set.seed(42)
DF <- data.frame(a = sample(c("a", "b", "c"), 10, T), b = sample(1:10, 10, T))
# a b
# 1 c 5
# 2 c 8
# 3 a 10
# 4 c 3
# 5 b 5
# 6 b 10
# 7 c 10
# 8 a 2
# 9 b 5
# 10 c 6
library(plyr)
res <- ddply(DF, .(a), transform, test = any(b %in% c(2, 3)))
res[!res$test, 1:2]
# a b
# 3 b 5
# 4 b 10
# 5 b 5
答案 2 :(得分:0)
使用一些ave
操作,使用示例数据@Roland:
DF[ave(DF$b,DF$a, FUN=function(x) !any(x %in% c(2,3)))==1,]
改编Jan的好答案:
DF[!DF$a %in% unique(DF$a[DF$b %in% c(2,3)]) ,]
两者都给予:
a b
5 b 5
6 b 10
9 b 5