R 笨方法删除重复值 -- 但凡重复就删除,第一行也不例外

R中常见的删除重复值的方法,不论是:

data1 <- data %>%
                     group_by_(ID) %>%
                     filter(row_number() == 1) %>%
                     ungroup()

还是:

index <- duplicated(data$ID)
data1 <- data[!index]

还是:

data1 <- unique(data$ID)

都不能避免一个问题:保留重复数据的第一行。具体表现,以‘duplicated’函数结果为例:

IDtimevalueindex
1110FALSE
2115FALSE
2276TRUE

这样当我们构建排除了重复值的数据库data1时,实际上是把第二行数据包括进去的。而当我们需要把第二行和第三行这样的数据都删除的时候,上述代码目前没有发现可行的方案。因此用for 循环自己写一个。

代码如下:

mark1 <- 1
markvec <- c(1:length(data$ID))
mark2 <- c('SAME')

for (mark1 in markvec) {
  if (data$ID[mark1] == data$ID[mark1+1]) {
    mark2 <- c(mark2, 'SAME')
  }else{if (data$ID[mark1] == data$ID[mark1-1]) {
    mark2 <- c(mark2, 'SAME')
  }else{mark2 <- c(mark2, '来啦老弟!?')}
    }
  mark1 <- mark1 + 1
}
table(mark2)

View(tail(data, 10))
mark2 <- c(mark2[2:12138], 'SAME')
data$index <- mark2
data1 <- filter(data, data$index == '来啦老弟!?')

这样把其中mark2标识为“来啦老弟!?”的记录存入data1, data1即是彻底删除重复值的数据库。
其中的

mark2 <- c('SAME')
# 和
mark2 <- c(mark2[2:12138], 'SAME')

需要人工观察data的前、后几行来进行判断到底是不是重复值,判断方法即:

View(head(data, 10))
View(tail(data, 10))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值