我有一个数据组,它看起来像以下的(部分):

id  name    dummy
1   Jane    1
1   Jane    0
1   Jane    1
2   Mike    0
2   Mike    0
2   Mike    0
2   Mike    0
2   Mike    0
3   Tom     1
3   Tom     1
3   Tom     0
3   Tom     0

我试图消除人们在可变dummy的全部为0。因此,举例来说,TomJane不会被淘汰,因为他们有dummy变量0或1,但Mike就会被淘汰,因为他有全0。所以,我想到底
   id   name    dummy
    1   Jane    1
    1   Jane    0
    1   Jane    1
    3   Tom     1
    3   Tom     1
    3   Tom     0
    3   Tom     0

我想过根据 dummy 对数据框进行排序,但我似乎无法弄清楚如何处理这样一个事实,即我只是试图消除变量 dummy 仅有 0 个值的人。任何建议将是真正的帮助!

最佳答案

考虑df是你data.frame,然后使用tapply[于子集你想要什么:

> ind <- with(df, tapply(dummy, name, sum))
> df[df$name %in% names(ind)[ind!=0], ]
   id name dummy
1   1 Jane     1
2   1 Jane     0
3   1 Jane     1
9   3  Tom     1
10  3  Tom     1
11  3  Tom     0
12  3  Tom     0

另一种选择:
> result <- split(df, df$name)[with(df, tapply(dummy, name, function(x) sum(x)!=0))]
> do.call(rbind, result)

关于r - 如何根据列值的条件选择行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20808724/

10-12 17:13