另一列 R 的分组操作

Group-by operation for another column R

我希望根据对另一列的分组对一列执行操作。

假设我有以下数据:

user <- c(1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3)
score <- c(1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1)
time_1 <- c(130, NA, 120, 245, NA, NA, NA, 841, NA, NA, 721, 612)
time_2 <- c(NA, 742, NA, NA, 812, 212, 214, NA, 919, 528, NA, NA)
df <- data.frame(user, score, time_1, time_2) 

我们得到以下 df:

   user score time_1 time_2
    1     1    130     NA
    1     0     NA    742
    1     1    120     NA
    1     1    245     NA
    2     0     NA    812
    2     0     NA    212
    2     0     NA    214
    2     1    841     NA
    3     0     NA    919
    3     0     NA    528
    3     1    721     NA
    3     1    612     NA

对于每个用户1,time_1的最小值是多少? 所以我希望按用户编号对用户进行分组,并在 time_1.

列上执行操作

根据 OP 请求更新(见评论): 只需将 summarise 替换为 mutate:

df %>% 
  group_by(user) %>% 
  mutate(Smallest_time1 = min(time_1, na.rm=TRUE))

    user score time_1 time_2 Smallest_time1
   <dbl> <dbl>  <dbl>  <dbl>          <dbl>
 1     1     1    130     NA            120
 2     1     0     NA    742            120
 3     1     1    120     NA            120
 4     1     1    245     NA            120
 5     2     0     NA    812            841
 6     2     0     NA    212            841
 7     2     0     NA    214            841
 8     2     1    841     NA            841
 9     3     0     NA    919            612
10     3     0     NA    528            612
11     3     1    721     NA            612
12     3     1    612     NA            612

我们可以在 summarise 中使用 min()na.rm=TRUE 参数:

library(dplyr)
df %>% 
  group_by(user) %>% 
  summarise(Smallest_time1 = min(time_1, na.rm= TRUE))
 user Smallest_time1
  <dbl>          <dbl>
1     1            120
2     2            841
3     3            612