R如何在group_之后的列中仅替换连续的重复值

R如何在group_之后的列中仅替换连续的重复值,r,group-by,duplicates,R,Group By,Duplicates,在以下具有2列的dataframe中,如何通过按第一列分组来仅替换第二列中的连续重复值 df <- data.frame(A = c( 1, 1, 1, 2, 2, 3, 3, 3, 3, 3), B = c(100,100,200,100,200,200,200,300,300,200)) df您可以从数据中使用rleid。表: 库(data.table) setDT(df) df[,B:=ifelse(复制(rleid(B)),NA

在以下具有2列的dataframe中,如何通过按第一列分组来仅替换第二列中的连续重复值

df <- data.frame(A = c( 1,  1,  1,  2,  2,  3,  3,  3,  3,  3),
                 B = c(100,100,200,100,200,200,200,300,300,200))

df您可以从
数据中使用
rleid
。表

库(data.table)
setDT(df)
df[,B:=ifelse(复制(rleid(B)),NA,B),by=“A”]
df
#>A B
#>  1: 1 100
#>2:1 NA
#>  3: 1 200
#>  4: 2 100
#>  5: 2 200
#>  6: 3 200
#>7:3 NA
#>  8: 3 300
#>9:3 NA
#> 10: 3 200

您可以从
数据中使用
rleid
。表

库(data.table)
setDT(df)
df[,B:=ifelse(复制(rleid(B)),NA,B),by=“A”]
df
#>A B
#>  1: 1 100
#>2:1 NA
#>  3: 1 200
#>  4: 2 100
#>  5: 2 200
#>  6: 3 200
#>7:3 NA
#>  8: 3 300
#>9:3 NA
#> 10: 3 200

基本R
中,我们可以用
重复的
ave

df$B <-  with(df, ave(B, A, FUN = function(x) 
      replace(x, duplicated(with(rle(x), rep(seq_along(values), lengths))), NA)))

df$B
#[1] 100  NA 200 100 200 200  NA 300  NA 200

df$B在
base R
中,我们可以替换为
重复的
ave

df$B <-  with(df, ave(B, A, FUN = function(x) 
      replace(x, duplicated(with(rle(x), rep(seq_along(values), lengths))), NA)))

df$B
#[1] 100  NA 200 100 200 200  NA 300  NA 200
df$B