我有一个简单的查询 - 并且已经搜索过,因为我认为它可能在之前出现过,但是没有找到合适的答案。所以这里:
我的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 :(得分: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")
<强>更新强> 根据你的意见,试试这个:
> ind <- with(df, tapply(olds, names, function(x) sum(x)!=0))
> df[df$names %in% levels(df$names)[!ind], ]
答案 1 :(得分:4)
未经测试的代码,但它应该让您知道您需要做什么 -
toremove <- unique(df[df$olds == 1,"names"])
df2 <- df[! df$names %in% toremove , ]