【R |
您所在的位置:网站首页 › 如何快速筛选出重复的数据并合并单元格的内容 › 【R |
有的时候发现想找出有重复的数据,可能有不同的需求,就要有不同的解决办法了 先弄一个小点的数据作为例子: > name num dt1 dt1 name number 1 a 1 2 b 2 3 a 3 4 a 4 5 c 5 6 c 6这里的name是有重复的,number没有重复。 1.去除重复数据这里的重复,是指两行数据完全相同,也就是说dt1整体来说是没有重复的,只有name有重复。用基础包中的unique()函数可以做到去除完全重复的数据,所有的行只会出现一次: > unique(dt1) name number 1 a 1 2 b 2 3 a 3 4 a 4 5 c 5 6 c 6 > unique(dt1$name) [1] "a" "b" "c"那如果要选出某一列有重复的数据该怎么办呢?这就要借助一下另一个函数:duplicated() 2.选出重复了的数据duplicated()函数返回的是和原数据长度相同的一组逻辑值,于是,可以用来判断和选择数据。找出有重复的,找出没有重复的都可以做到。 > duplicated(dt1$name) [1] FALSE FALSE TRUE TRUE FALSE TRUE > dt1[duplicated(dt1$name) == T,] name number 3 a 3 4 a 4 6 c 6 > dt1[duplicated(dt1$name) == F,] name number 1 a 1 2 b 2 5 c 5这也要还有一个问题,它只会选择出第二次及其以后出现的数据,a在原数据中出现了三次,第一次上出现的a,它认为是没有重复的,如果也想选择出来该怎么做呢?我寻找到一个我觉得比较好的办法。 3.选出有重复的数据(包含第一次出现的)这里使用了一个比较厉害的包了,dplyr,看来得好好学一学它。 > library(dplyr) > duplicate_name = dt1 %>% group_by(name) %>% summarise(freq = n()) %>% filter(freq > 1) %>% select(name) > duplicate_name # A tibble: 2 x 1 name 1 a 2 c > duplicate_data = dt1[dt1$name %in% duplicate_name$name, ] > duplicate_data name number 1 a 1 3 a 3 4 a 4 5 c 5 6 c 6貌似这个包需要额外安装下。这里的%>%类似通道符,把左边的结果传输到右边,%%感觉有点转义符的意味了。 先是对频数进行记录,在来一轮选择,如果想知道每一步都发生了什么,可以一段一段拆解开来运行看一下。 最终,出现过重复的所有数据就都选择出来啦! 参考资料R语言中 在有重复的数据中只保留时间最大的一条数据 番外以及我看还有人是通过循环,再找一遍和重复数据有重合的,来弥补第一次数据的缺失,我感觉比较麻烦一些,而且数据比较大的话,貌似就不是太方便了,我也去试试看。 使用R语言筛选数据中的重复行 dt2 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |