我有一个数据框:
> 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
答案 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