繁体   English   中英

如何使用dplyr根据另一列的不同值在新列中填充不同的值?

[英]How to fill different values in a new column based on different values of another column using dplyr?

这是我的数据:

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))

我想以这种方式生成一个新列:

  1. x分组,因此所有A都在一个组中,所有B在另一个组中
  2. 对于每个组,如果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这样的新变量?

您可以将两个管道结合在一起,一次执行相同的功能。

即..

    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标记的重复列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM