删除与给定ID对应的所有行

时间:2013-07-18 09:33:23

标签: r

数据概述:

> 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”。谢谢。

3 个答案:

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