0

数据概览:

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

4

3 回答 3

3

您首先必须选择所有gvkey要删除的:

keys_to_delete <- unique(NewDataFrame$gvkey[NewDataFrame$NewCol %in% 
    c("Del","Del2")])

然后使用这些删除相应的行:

dataStart <- NewDataFrame[!(NewDataFrame$gvkey %in% keys_to_delete), ]
于 2013-07-18T09:48:00.743 回答
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
于 2013-07-18T09:45:44.260 回答
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
于 2013-07-18T10:12:48.850 回答