代码之家  ›  专栏  ›  技术社区  ›  Union find

使用group_by检查单元格值,如果存在,则将其添加到组中的所有列单元格中

  •  1
  • Union find  · 技术社区  · 8 年前

    我正在尝试执行一个相当复杂的dplyr函数。

    我有一个fec的行和列的数据集。看起来是这样的:

        cov_end_dat tot_rec idfull       rep_typ                            
    
    1   3/31/07 271972.12   H6WI070332008   Q1
    2   6/30/07 303687.1    H6WI070332008   Q2
    3   9/30/07 158947.03   H6WI070332008   Q3
    4   12/31/07    174545.28   H6WI070332008   YE
    5   3/31/08 267260.1    H6WI070332008   Q1
    6   6/30/08 280075.62   H6WI070332008   Q2
    7   8/20/08 58659.79    H6WI070332008   12P
    8   9/30/08 114268.7    H6WI070332008   Q3
    9   10/15/08    38125   H6WI070332008   12G
    10  11/24/08    78178.97    H6WI070332008   30G
    11  12/31/08    3448.67 H6WI070332008   YE
    

    每个候选人都有一个ID和一个“代表类型”(报告类型)。

    我正在尝试执行以下操作。对于每个候选人(都有相同的idfull值),我想看看是否有q1值。如果有,我想获取该行中cov_结束单元格的值,并在一个名为“q1date”的新列中将其分配给具有相同idfull的所有单元格。否则,我想给它分配一个预设的日期。

    我尝试这样做的方式是:

    data %>% group_by(idfull) %>% %>% mutate(Q1date = SOMEHOW LOOK INSIDE GROUP FOR VALUE?) %>% ungroup()
    
    2 回复  |  直到 8 年前
        1
  •  3
  •   Andrew Gustar    8 年前

    你可以这么做

    data %>% group_by(idfull) %>% 
         mutate(Q1date=first(cov_end_dat[rep_typ=="Q1"]))
    
       cov_end_dat tot_rec idfull        rep_typ Q1date 
       <chr>         <dbl> <chr>         <chr>   <chr>  
     1 3/31/07     271972. H6WI070332008 Q1      3/31/07
     2 6/30/07     303687. H6WI070332008 Q2      3/31/07
     3 9/30/07     158947. H6WI070332008 Q3      3/31/07
     4 12/31/07    174545. H6WI070332008 YE      3/31/07
     5 3/31/08     267260. H6WI070332008 Q1      3/31/07
     6 6/30/08     280076. H6WI070332008 Q2      3/31/07
     7 8/20/08      58660. H6WI070332008 12P     3/31/07
     8 9/30/08     114269. H6WI070332008 Q3      3/31/07
     9 10/15/08     38125. H6WI070332008 12G     3/31/07
    10 11/24/08     78179. H6WI070332008 30G     3/31/07
    11 12/31/08      3449. H6WI070332008 YE      3/31/07
    
        2
  •  0
  •   Puddlebunk    8 年前

    请看我上面的评论,但类似的东西应该管用。

       select(idfull, rep_typ, cov_end) %>%
    filter(rep_typ == Q1) %>%
    unique() %>%
    select(-rep_typ) %>%
    left_join(original_data, .)
    

    像那样?