控制行以在dplyr中保持不同

时间:2019-02-14 15:04:01

标签: r dplyr tibble

这里有一个数据框:

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的另一行。

2 个答案:

答案 0 :(得分:1)

在使用tibble之前先安排distinct

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

答案 1 :(得分: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