控制行以在 dplyr 中保持不同
Control rows to keep with distinct in dplyr
这里我有一个数据框:
df2 <- data.frame(a=c("A", "A", "B"), b=c(1, 0, 1))
df2 %>%
distinct(a, .keep_all=TRUE)
结果:
a b
1 A 1
2 B 1
但我想控制哪一行保留条件。例如。 distinct(a)
但当 b==0 时保留该行。那就是我想用A保留另一行。
在使用distinct
之前安排tibble
。
library(dplyr)
df2 <- data.frame(a=c("A", "A", "B"), b=c(1, 0, 1))
df2 %>%
arrange(a, b) %>%
distinct(a, .keep_all=TRUE)
# a b
# 1 A 0
# 2 B 1
您可能需要构建一个自定义函数来检查所有 duplicated
,我们需要结合来自列 a 和 b
的检查
dupf=function(x){
return(duplicated(x) | duplicated(x, fromLast=TRUE))
}
df2 %>% dplyr::mutate(ft=!(dupf(a)&dupf(b)))%>%filter(ft)
a b ft
1 A 0 TRUE
2 B 1 TRUE
这里我有一个数据框:
df2 <- data.frame(a=c("A", "A", "B"), b=c(1, 0, 1))
df2 %>%
distinct(a, .keep_all=TRUE)
结果:
a b
1 A 1
2 B 1
但我想控制哪一行保留条件。例如。 distinct(a)
但当 b==0 时保留该行。那就是我想用A保留另一行。
在使用distinct
之前安排tibble
。
library(dplyr)
df2 <- data.frame(a=c("A", "A", "B"), b=c(1, 0, 1))
df2 %>%
arrange(a, b) %>%
distinct(a, .keep_all=TRUE)
# a b
# 1 A 0
# 2 B 1
您可能需要构建一个自定义函数来检查所有 duplicated
,我们需要结合来自列 a 和 b
dupf=function(x){
return(duplicated(x) | duplicated(x, fromLast=TRUE))
}
df2 %>% dplyr::mutate(ft=!(dupf(a)&dupf(b)))%>%filter(ft)
a b ft
1 A 0 TRUE
2 B 1 TRUE