R如何在group_之后的列中仅替换连续的重复值
在以下具有2列的dataframe中,如何通过按第一列分组来仅替换第二列中的连续重复值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
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