这是我的数据:
a <- data.frame(x=c('A','A','A','B','B','B'),
y=c('Yes','No','No','Yes','No','No'),
z=c(1,2,3,4,5,6))
我想以这种方式生成一个新列:
x
,因此所有A
s 将在一个组中,所有B
s 将在另一个组中y=Yes
,则将z
值保留在新列中。如果y=No
,则使用z
带有的值y=Yes
。因此,新数据应如下所示:
x y z z1
A Yes 1 1
A No 2 1
A No 3 1
B Yes 4 4
B No 5 4
B No 6 4
我可以用这种方式来做:
a1 <- a %>%
filter(y=='Yes') %>%
distinct(x,y,z)
a2 <- a %>%
left_join(a1,by='x') %>%...
但是这样一来,我就不得不生a1
成为中间人了。如何仅在一个管道中执行此操作而不生成像a1
我的示例中那样的新变量?
您可以合并两个管道并一次性执行相同的功能。
IE..
a <- data.frame(x=c('A','A','A','B','B','B'),
y=c('Yes','No','No','Yes','No','No'),
z=c(1,2,3,4,5,6))
a %>% left_join(a %>% filter(y=='Yes') %>% distinct(x,y,z), by='x') %>% select(-y.y)
由于连接,这会导致用 .x 和 .y 标记的重复列。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句