根据R中的2列删除重复的行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据R中的2列删除重复的行相关的知识,希望对你有一定的参考价值。
我是R.的新手。我有这个数据框:
TimeStamp IndexA IndexB Value
12:00:01 1 NA Windows
12:00:05 1 NA Windows
12:00:13 1 NA Windows
12:00:48 NA 1 Macintosh
12:01:30 NA 1 Macintosh
12:01:45 NA 1 Macintosh
12:02:01 2 NA Windows
12:02:13 2 NA Windows
我想删除基于IndexA
和Value
或IndexB
和Value
列的重复行。所以,最后数据框应该是这样的:
TimeStamp IndexA IndexB Value
12:00:01 1 NA Windows
12:00:48 NA 1 Macintosh
12:02:01 2 NA Windows
我该怎么办呢?
答案
为了完整起见,还可以使用unique()
包中的data.table
函数:
library(data.table)
unique(setDT(df), by = "IndexA")
TimeStamp IndexA IndexB Value 1: 12:00:01 1 NA Windows 2: 12:00:48 NA 1 Macintosh 3: 12:02:01 2 NA Windows
这只是在IndexA
中寻找唯一值,这相当于Tito Sanz' answer。显然,这种方法返回给定样本数据集的预期结果,但仅检查一列重复条目是过度简化恕我直言,可能会因生产数据而失败。
或者,在三列中查找值的唯一组合(相当于www's answer):
unique(setDT(df), by = 2:4) # very terse
unique(setDT(df), by = c("IndexA", "IndexB", "Value")) # explicitely named cols
TimeStamp IndexA IndexB Value 1: 12:00:01 1 NA Windows 2: 12:00:48 NA 1 Macintosh 3: 12:02:01 2 NA Windows
Data
library(data.table)
df <- fread(
"TimeStamp IndexA IndexB Value
12:00:01 1 NA Windows
12:00:05 1 NA Windows
12:00:13 1 NA Windows
12:00:48 NA 1 Macintosh
12:01:30 NA 1 Macintosh
12:01:45 NA 1 Macintosh
12:02:01 2 NA Windows
12:02:13 2 NA Windows")
另一答案
使用dplyr
的解决方案。我们可以使用distinct
函数。在考虑重复时,-TimeStamp
指定此列被排除。 .keep_all = TRUE
意味着保留所有列。
library(dplyr)
dt2 <- dt %>%
distinct(-TimeStamp, .keep_all = TRUE)
dt2
# # A tibble: 3 x 4
# TimeStamp IndexA IndexB Value
# <chr> <int> <int> <chr>
# 1 12:00:01 1 NA Windows
# 2 12:00:48 NA 1 Macintosh
# 3 12:02:01 2 NA Windows
数据
dt <- read.table(text = "TimeStamp IndexA IndexB Value
12:00:01 1 NA Windows
12:00:05 1 NA Windows
12:00:13 1 NA Windows
12:00:48 NA 1 Macintosh
12:01:30 NA 1 Macintosh
12:01:45 NA 1 Macintosh
12:02:01 2 NA Windows
12:02:13 2 NA Windows",
header = TRUE, stringsAsFactors = FALSE)
另一答案
你可以在distinct
包中使用tidyverse
函数。
foo %>%
distinct(IndexA, .keep_all = T)
结果如下:
TimeStamp IndexA IndexB Value
1 12:00:01 1 NA Windows
2 12:00:48 NA 1 Macintosh
3 12:02:01 2 NA Windows
以上是关于根据R中的2列删除重复的行的主要内容,如果未能解决你的问题,请参考以下文章