首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除R中数据中的连续值之间的重复

删除R中数据中的连续值之间的重复
EN

Stack Overflow用户
提问于 2022-04-29 08:58:55
回答 3查看 41关注 0票数 0

我有一个数据报,例如

代码语言:javascript
复制
COL1 COL2 COL3
G1 1 6
G1 2 6
G1 3 7
G1 4 9
G1 5 9
G1 6 9
G1 7 6
G1 8 6
G1 9 7
G1 10 7
G1 11 7
G1 12 8
G1 13 7

我希望删除重复的连续COL3值,并保留第一个。

在这里,我应该得到:

代码语言:javascript
复制
COL1 COL2 COL3
G1 1 6
G1 3 7
G1 4 9
G1 7 6
G1 9 7
G1 12 8
G1 13 7

以下是dput格式(如果可以的话):

代码语言:javascript
复制
structure(list(COL1 = c("G1", "G1", "G1", "G1", "G1", "G1", "G1", 
"G1", "G1", "G1", "G1", "G1", "G1"), COL2 = 1:13, COL3 = c(6L, 
6L, 7L, 9L, 9L, 9L, 6L, 6L, 7L, 7L, 7L, 8L, 7L)), class = "data.frame", row.names = c(NA, 
-13L))
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-04-29 09:06:03

在基R中,可以使用游程编码(rle):

代码语言:javascript
复制
df[nrow(df) - rev(cumsum(rle(rev(df$COL3))$lengths) - 1),]
#>    COL1 COL2 COL3
#> 1    G1    1    6
#> 3    G1    3    7
#> 4    G1    4    9
#> 7    G1    7    6
#> 9    G1    9    7
#> 12   G1   12    8
#> 13   G1   13    7

rleid来自data.table

代码语言:javascript
复制
df[c(TRUE, diff(data.table::rleid(df$COL3)) == 1),]
#>    COL1 COL2 COL3
#> 1    G1    1    6
#> 3    G1    3    7
#> 4    G1    4    9
#> 7    G1    7    6
#> 9    G1    9    7
#> 12   G1   12    8
#> 13   G1   13    7

或者只保留与自己的滞后不匹配的行:

代码语言:javascript
复制
df[df$COL3 != dplyr::lag(df$COL3, default = pi),]
#>    COL1 COL2 COL3
#> 1    G1    1    6
#> 3    G1    3    7
#> 4    G1    4    9
#> 7    G1    7    6
#> 9    G1    9    7
#> 12   G1   12    8
#> 13   G1   13    7
票数 2
EN

Stack Overflow用户

发布于 2022-04-29 09:07:58

基于dplyr的另一种可能的解决方案

代码语言:javascript
复制
library(dplyr)

df %>% 
  filter(COL3 != lead(COL3, default = Inf))

#>   COL1 COL2 COL3
#> 1   G1    2    6
#> 2   G1    3    7
#> 3   G1    6    9
#> 4   G1    8    6
#> 5   G1   11    7
#> 6   G1   12    8
#> 7   G1   13    7
票数 2
EN

Stack Overflow用户

发布于 2022-04-29 09:19:09

使用data.table

代码语言:javascript
复制
temp[COL3!=lag(COL3,default = 0)]

输出

代码语言:javascript
复制
   COL1 COL2 COL3
1:   G1    1    6
2:   G1    3    7
3:   G1    4    9
4:   G1    7    6
5:   G1    9    7
6:   G1   12    8
7:   G1   13    7
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72055382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档