gpt4 book ai didi

r - 删除组内的重复项?

转载 作者:行者123 更新时间:2023-12-02 23:28:04 30 4
gpt4 key购买 nike

示例数据代码:

    mydf<-data.frame(Group_ID=c("337", "337", "201", "201", "470", "470", "999", "999"), 
Timestamp=c("A", "A", "B", "B", "C", "D", "E", "F"),
MU=c("1", "1", "2", "3", "4", "4", "5", "6"))

示例数据框:

  Group_ID Timestamp MU
1 337 A 1
2 337 A 1
3 201 B 2
4 201 B 3
5 470 C 4
6 470 D 4
7 999 E 5
8 999 F 6

在“Group_ID”中,我只想保留“Timestamp”和“MU”都不重复的条目。因此,在此示例中,仅保留第 7 行和第 8 行(“Group_ID”999 具有“Timestamp”和“MU”的唯一条目)。

我的一些尝试:

mydf<-mydf %>%
group_by(Group_ID) %>%
filter(unique(Timestamp))

返回错误:

"Argument 2 filter condition does not evaluate to a logical vector"

如果这确实有效,我会使用 unique(MU) 再次运行它

mydf<-mydf %>%
group_by(Group_ID) %>%
mydf[!duplicated(mydf$Timestamp, fromLast = TRUE),]

返回错误:

"Length of logical index vector must be 1 or 3 (the number of columns), not 8"

(同样,我会使用 MU 再次运行代码)

我浏览过类似的问题,但没有找到具有相同场景的问题。提前谢谢了。

最佳答案

如果我们使用过滤器,它需要一个逻辑向量。 unique 的输出只是该列(character 类)的唯一元素。所以这是行不通的。我们可以使用duplicated来获取重复元素的逻辑向量,否定(!)。这样 TRUE -> FALSE ,反之亦然,仅获取第一个非重复元素

library(dplyr)
mydf %>%
group_by(Group_ID) %>%
filter(!(duplicated(Timestamp, fromLast = TRUE)| duplicated(Timestamp)))
<小时/>

或者根据行数按“Group_ID”、“时间戳”和过滤器进行分组

mydf %>%
group_by(Group_ID, Timestamp) %>%
filter(n() == 1)

如果我们只需要“999”“Group_ID”

mydf %>% 
group_by(Group_ID) %>%
filter_at(vars(Timestamp, MU), all_vars(n_distinct(.) == n()))
# A tibble: 2 x 3
# Groups: Group_ID [1]
# Group_ID Timestamp MU
# <fct> <fct> <fct>
#1 999 E 5
#2 999 F 6
<小时/>

或者直接使用distinct

distinct(mydf, Group_ID, Timestamp, .keep_all = TRUE)

关于r - 删除组内的重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57809372/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com