我有两个数据集:D 1 和D 2 。 D 2 是D 1 和更大数据集(我称为D 3 )的左连接。尽管D 2 的键列具有与D 1 相同的唯一元素数,但它还是有一些重复项,我希望根据某些条件将其删除。>
有两个问题:
1)除了键值外,有些行充满了NA值,这些行对我来说非常重要。
2)还有一些其他行可能会重复也可能不会重复,但与我的标准条件不匹配。
如何根据层次结构有条件地删除这些重复项?
样本数据集:
ID Var
1 1
2 1
3 1
3 9
4 2
4 9
5 1
6 1
7 1
7 9
7 9
8 2
9
10 1
期望的数据集:
ID Var
1 1
2 1
3 1
4 2
5 1
6 1
7 1
8 2
9
10 1
答案 0 :(得分:0)
duplicated
满足您的需求。
dat[!duplicated(dat$ID),]
# ID Var
# 1 1 1
# 2 2 1
# 3 3 1
# 5 4 2
# 7 5 1
# 8 6 1
# 9 7 1
# 12 8 2
# 13 9 NA
# 14 10 1
tidyverse的一些东西也是如此
library(dplyr)
dat %>%
group_by(ID) %>%
slice(1) %>%
ungroup()
还有data.table ...
library(data.table)
as.data.table(dat)[ !duplicated(ID), ]
数据:
dat <- read.table(header = TRUE, text = "
ID Var
1 1
2 1
3 1
3 9
4 2
4 9
5 1
6 1
7 1
7 9
7 9
8 2
9 NA
10 1")
答案 1 :(得分:0)
说吧!我们在下面有一个data.table:
Library(data.table)
df <- data.table(Name = c("JACK", "JOHN", "JACK", "ANNIE", "JOHN", "JACK"),
Amount = c(30, 10, 20, 24, 5, 1))
在这种情况下,我按名称排序,因此它将类似于您的ID列。得到适当的订单后,我只会得到第一个结果
df[][order(Name, Amount)]
df[,.SD[1], by = Name]
Name Amount
1: JACK 30
2: JOHN 10
3: ANNIE 24
希望对您有所帮助。