如果您有这样的数据框:
v <- c(1, 1, 5, 5, 2, 2, 6, 6, 1, 2, 2, 2, 2, 2, 2, 3)
w <- data.frame(v)
Run Code Online (Sandbox Code Playgroud)
如何删除重复值w并将其替换为NA仅在值之后立即重复的值,以便新数据框如下所示?
v <- c(1, NA, 5, NA, 2, NA, 6, NA, 1, 2, NA, NA, NA, NA, NA, 3)
w <- data.frame(v)
Run Code Online (Sandbox Code Playgroud)
注意2连续出现两次并且每次出现时都会保留,并且立即重复的值都被删除了吗?
我搜索了SO,我看到了使用独特和重复的功能删除每个重复值的响应,但这不是我正在搜索的内容.我希望R中有一个包可以在不使用函数的情况下执行此操作.
关键是检查差异使用diff()和填充NA差异为零时:
> result <- v
> result[c(FALSE,diff(v)==0)] <- NA
> result
[1] 1 NA 5 NA 2 NA 6 NA 1 2 NA NA NA NA NA 3
>
Run Code Online (Sandbox Code Playgroud)
或者简单ifelse:
ifelse(lag(v,1) == v & !is.na(lag(v,1)), NA, v)
#[1] 1 NA 5 NA 2 NA 6 NA 1 2 NA NA NA NA NA 3
Run Code Online (Sandbox Code Playgroud)
编辑:如果原始矢量包含NA,最好使用dplyr::lag而不是stats::lag.
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |