取一个等值的子集和列的其他值

时间:2018-01-30 17:23:02

标签: r

我有一个数据框:

> df <- data.frame(x = c('x1','x1','x2','x2','x2','x3','x3','x3'),
+                  y = c(0,0,1,1,1,0,0,0),
+                  z = c(1,1,0,0,0,0,0,0))
> df
   x y z
1 x1 0 1
2 x1 0 1
3 x2 1 0
4 x2 1 0
5 x2 1 0
6 x3 0 0
7 x3 0 0
8 x3 0 0

我想基于y列创建一个子集,它等于1,根据条件保留x列的值,并使1为0。

我只找到了如何找到第一步:

> length(which(df$y == 1))
[1] 3

怎样才能得到这样的最终结果:

x  y
x2 0
x2 0
x2 0

3 个答案:

答案 0 :(得分:4)

require(dplyr)
df %>% 
    filter(y == 1) %>% 
    select(x, y) %>% 
    mutate(y = 0)

答案 1 :(得分:3)

 transform(subset(df[1:2],y==1),y=0)
   x y
3 x2 0
4 x2 0
5 x2 0

答案 2 :(得分:2)

如果您打开使用其他套餐,data.table是另一种选择:

library(data.table)
setDT(df)[y == 1, .(x, y = 0)]

#   x y
#1: x2 0
#2: x2 0
#3: x2 0