首页 > 解决方案 > 使用 dplyr 修改另一个向量中分组变量的最后一个元素的值

问题描述

我想修改以下数据框,以便全部x为:ping == 3NA

数据

d <- tibble(id = rep(c(1001, 1002), each = 6),
            day = rep(c(1, 1, 1, 2, 2, 2), 2),
            ping = rep(1:3, 4),
            x = rnorm(12, 5, 4),
            y = x*0.3 + rnorm(12))

# A tibble: 12 x 5
      id   day  ping     x      y
   <dbl> <dbl> <int> <dbl>  <dbl>
 1  1001     1     1  5.63  0.783
 2  1001     1     2  7.02  3.41 
 3  1001     1     3  1.72  1.29 
 4  1001     2     1 -3.00  0.154
 5  1001     2     2  3.08 -0.485
 6  1001     2     3  5.34  2.60 
 7  1002     1     1  1.42 -1.27 
 8  1002     1     2  1.31 -0.139
 9  1002     1     3  6.32  0.524
10  1002     2     1  4.43 -0.878
11  1002     2     2  6.74  3.84 
12  1002     2     3  4.79  0.782

期望的输出

# A tibble: 12 x 5
      id   day  ping     x      y
   <dbl> <dbl> <int> <dbl>  <dbl>
 1  1001     1     1  5.63  0.783
 2  1001     1     2  7.02  3.41 
 3  1001     1     3  NA    1.29 
 4  1001     2     1 -3.00  0.154
 5  1001     2     2  3.08 -0.485
 6  1001     2     3  NA    2.60 
 7  1002     1     1  1.42 -1.27 
 8  1002     1     2  1.31 -0.139
 9  1002     1     3  NA    0.524
10  1002     2     1  4.43 -0.878
11  1002     2     2  6.74  3.84 
12  1002     2     3  NA    0.782

我该怎么做dplyr

d %>%
    group_by(day) %>%
    mutate(...)

标签: rdplyr

解决方案


您可以在不分组的情况下执行此操作。我认为根据您的新要求,这可能会有所帮助:

library(dplyr)

d %>%
  group_by(id, day) %>%
  arrange(ping) %>%
  mutate(x = ifelse(row_number() == n(), NA, x)) %>%
  ungroup() %>%
  arrange(id, day)

# A tibble: 12 x 5
      id   day  ping      x       y
   <dbl> <dbl> <int>  <dbl>   <dbl>
 1  1001     1     1  5.19   2.54  
 2  1001     1     2  0.582  1.06  
 3  1001     1     3 NA      2.63  
 4  1001     2     1  7.32   3.16  
 5  1001     2     2  2.37  -0.104 
 6  1001     2     3 NA      3.65  
 7  1002     1     1  0.249 -0.0869
 8  1002     1     2  5.61   3.62  
 9  1002     1     3 NA      1.92  
10  1002     2     1 11.5    3.79  
11  1002     2     2  5.14   1.85  
12  1002     2     3 NA      2.68  

推荐阅读