我有一个简单的查询 - 并且已经搜索过,因为我认为它可能在之前出现过,但是没有找到合适的答案.所以这里:
我有如下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
Run Code Online (Sandbox Code Playgroud)
汤姆有一个二元指标.因为他有这个,我想删除所有汤姆的行.
期望的输出是
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
Run Code Online (Sandbox Code Playgroud)
如果我错过了相关的帖子道歉,请提前感谢您的帮助!
考虑一下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
Run Code Online (Sandbox Code Playgroud)
或使用 subset
> df <- subset(df, names != "tom")
Run Code Online (Sandbox Code Playgroud)
更新: 根据你的upate,试试这个:
> ind <- with(df, tapply(olds, names, function(x) sum(x)!=0))
> df[df$names %in% levels(df$names)[!ind], ]
Run Code Online (Sandbox Code Playgroud)