2013-12-10 55 views
0

我有一个简单的查询 - 并已搜索,因为我认为它可能出现之前,但还没有找到合适的答案。所以这里有云:为一个ID删除所有行R

我havea DF如下

names drugs  dates olds 
4 john A02BC01 2010-05-01 0 
6 john C09AA03 2010-08-01 0 
11 john N02AA01 2010-06-14 0 
2 mary C09AA03 2010-06-01 0 
3 mary C10AA07 2010-07-01 0 
7 mary A02BC01 2010-07-01 0 
9 mary C10AA07 2010-07-24 0 
1 tom C10AA05 2010-04-06 0 
5 tom C10AA05 2009-12-01 1 
8 tom C10AA05 2010-08-01 0 
10 tom C07AB03 2010-05-12 0 

汤姆有一个二进制指标。因为他有这个,我想删除所有汤姆的行。

所需的输出是

names drugs  dates olds 
4 john A02BC01 2010-05-01 0 
6 john C09AA03 2010-08-01 0 
11 john N02AA01 2010-06-14 0 
2 mary C09AA03 2010-06-01 0 
3 mary C10AA07 2010-07-01 0 
7 mary A02BC01 2010-07-01 0 
9 mary C10AA07 2010-07-24 0 

预先感谢您的帮助,如果我错过了一个相关帖子的歉意!

+0

为什么我被减1? – user2363642

回答

4

未经测试的代码,但它应该给你一个你需要做什么的想法 -

toremove <- unique(df[df$olds == 1,"names"]) 
df2 <- df[! df$names %in% toremove , ] 
+0

完美。非常感谢你codoremifa – user2363642

5

考虑df是你data.frame,然后尝试:

> (df <- df[df[, "names" ] != "tom", ]) 
    names drugs  dates olds 
4 john A02BC01 2010-05-01 0 
6 john C09AA03 2010-08-01 0 
11 john N02AA01 2010-06-14 0 
2 mary C09AA03 2010-06-01 0 
3 mary C10AA07 2010-07-01 0 
7 mary A02BC01 2010-07-01 0 
9 mary C10AA07 2010-07-24 0 

或者使用subset

> df <- subset(df, names != "tom") 

更新时间: 根据你upate,试试这个:

> ind <- with(df, tapply(olds, names, function(x) sum(x)!=0)) 
> df[df$names %in% levels(df$names)[!ind], ] 
+0

THanks吉尔伯回到我身边。我应该让我的查询更加明确 - 我希望根据二进制指示符删除行,因为我的df长达数百万行。道歉,我几个月没有发布问题,生锈。 – user2363642

+0

很好用 - 谢谢@Jilber – user2363642