代码示例数据:
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"))
Run Code Online (Sandbox Code Playgroud)
示例数据框:
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
Run Code Online (Sandbox Code Playgroud)
在“ Group_ID”中,我只想保留“ Timestamp”和“ MU”都不重复的条目。因此,在该示例中,将仅保留行7和8(“ Group_ID” 999具有“时间戳”和“ MU”两者的唯一条目)。
我的一些尝试:
mydf<-mydf %>%
group_by(Group_ID) %>%
filter(unique(Timestamp))
Run Code Online (Sandbox Code Playgroud)
返回错误:
“参数2过滤条件不等于逻辑向量”
如果这行得通,那么我将再次使用 unique(MU)
mydf<-mydf %>%
group_by(Group_ID) %>%
mydf[!duplicated(mydf$Timestamp, fromLast = TRUE),]
Run Code Online (Sandbox Code Playgroud)
返回错误:
“逻辑索引向量的长度必须为1或3(列数),而不是8”
(再次,我将再次使用MU运行代码)
我已经浏览过类似的问题,但没有找到具有相同场景的问题。提前谢谢了。
如果使用filter,则需要逻辑向量。的输出unique只是该列(character类)的唯一元素。因此,它将无法正常工作。我们可以duplicated用来获取重复元素的逻辑向量negate(!)。这样TRUE-> FALSE,反之亦然,以仅获取第一个非重复元素
library(dplyr)
mydf %>%
group_by(Group_ID) %>%
filter(!(duplicated(Timestamp, fromLast = TRUE)| duplicated(Timestamp)))
Run Code Online (Sandbox Code Playgroud)
或filter根据行数对“ Group_ID”,“时间戳”进行分组
mydf %>%
group_by(Group_ID, Timestamp) %>%
filter(n() == 1)
Run Code Online (Sandbox Code Playgroud)
如果我们只需要'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
Run Code Online (Sandbox Code Playgroud)
或distinct直接使用
distinct(mydf, Group_ID, Timestamp, .keep_all = TRUE)
Run Code Online (Sandbox Code Playgroud)