【发布时间】:2011-06-09 18:40:37
【问题描述】:
我想过滤掉 var3
> foo <- data.frame(var1=c(1, 1, 8, 8, 5, 5, 5), var2=c(1,2,3,2,4,6,8), var3=c(7,1,1,1,1,1,6))
> foo
var1 var2 var3
1 1 1 7
2 1 2 1
3 8 3 1
4 8 2 1
5 5 4 1
6 5 6 1
7 5 8 6
subset(foo, (foo$var3>=5)) 将删除第 2 行到第 6 行,我会丢失 var1==8。
- 如果 var1 的另一个值满足 foo$var3 >= 5 的条件,我想删除该行。请参见第 5 行。
- 我想保留该行,如果值 var1 的所有出现不满足条件 foo$var3 >= 5,则将 NA 分配给 var2 和 var3。
这是我期望的结果:
var1 var2 var3
1 1 1 7
3 8 NA NA
7 5 8 6
这是我得到的最接近的:
> foo$var3[ foo$var3 < 5 ] = NA
> foo$var2[ is.na(foo$var3) ] = NA
> foo
var1 var2 var3
1 1 1 7
2 1 NA NA
3 8 NA NA
4 8 NA NA
5 5 NA NA
6 5 NA NA
7 5 8 6
现在我只需要知道如何有条件地删除正确的行(2、3 或 4、5、6):如果 var2 和 var3 为 NA 并且如果 var1 的值,则删除该行出现超过 1 次。
但肯定有一种更简单/优雅的方法来解决这个小问题。
编辑: 更改了 foo 以更类似于我的用例
【问题讨论】:
标签: r