如何替换每组的第一个值

ner*_*gul 3 r dplyr

我的 df 如下:

set.seed(123)
df <- data.frame(x = sample(letters[1:3],20,replace = TRUE),
                 y = sample(1:10,20,replace = TRUE))
df <- df[order(df$x),]
Run Code Online (Sandbox Code Playgroud)

我想用 NA 替换每个组的第一个值。例如:

x y
a NA
a 8
a 1
a 8
b NA
b 3
b 2
b 10
b 8
.
.
Run Code Online (Sandbox Code Playgroud)

我对获取第一个值没有问题,但这没有意义。

test <- df %>% 
  group_by(x) %>% 
  do(a = head(.$y,1))
Run Code Online (Sandbox Code Playgroud)

请帮助下一步。

Ron*_*hah 9

随着dplyr我们可以replace值,其中row_number1

library(dplyr)

df %>%
  group_by(x) %>%
  mutate(y = replace(y, row_number() == 1, NA))


#    x         y
#   <fct> <int>
# 1 a        NA
# 2 a         8
# 3 a         1
# 4 a         8
# 5 a         3
# 6 a         4
# 7 b        NA
# 8 b         6
# 9 b         3
#10 b         2
#....
Run Code Online (Sandbox Code Playgroud)

或使用基础 R ave

with(df, ave(y, x, FUN = function(i) replace(i, seq_along(i) == 1, NA)))
#[1] NA  8  1  8  3  4 NA  6  3  2 10  8 NA 10  7  6 10  7  5  3
Run Code Online (Sandbox Code Playgroud)