删除重复的行,检查多列中的重复值,并保留没有NA值的行

时间:2018-02-16 12:41:55

标签: r dplyr data-manipulation

我扫描stackoverflow超过一个小时才找到解决方案,但失败了。所以发布问题。

我有一个数据框,我需要删除重复项,但诀窍是,重复的值可以在两个不同的列中用于单独的行。我需要删除另一列具有NA值的行。

示例数据框

Act    Func     Func_2 
generate numbers    odd           
generate numbers   and
generate print      <NA>
generate column     print
displays time       <NA>
displays date       time
displays print      time
displays task       <NA>

由于Func和Func_2中的打印都存在于两行中具有相同的Act值,因此我需要删除Func_2中存在NA的行。 但是,如果Act列中的值不同,我需要保留两行。

预期数据框

Act    Func     Func_2 
generate numbers    odd           
generate numbers   and
generate column     print
displays date       time
displays print      time
displays task       <NA>

2 个答案:

答案 0 :(得分:1)

在这里试试这个:

df1 %>% group_by(Act) %>% # the following test will be done by group
  mutate(test = if_else(Func %in% Func_2,
                                if_else(is.na(Func_2), FALSE, TRUE),
                                TRUE)) %>% 
#this will create a logical helper column.  
                                filter(test == TRUE) #just for completeness

# A tibble: 6 x 4
# Groups:   Act [2]
  Act      Func    Func_2 test 
  <chr>    <chr>   <chr>  <lgl>
1 generate numbers odd    T    
2 generate numbers and    T    
3 generate column  print  T    
4 displays date    time   T    
5 displays print   time   T    
6 displays task    <NA>   T 

答案 1 :(得分:0)

这是你之后的事吗?

library(dplyr)

制作数据框:

a <- c(1, 2, 3, 4)
b <- c(5, 6, NA, 7)
df <- data.frame(a, b)

过滤行以确保两列都不丢失:

df <- filter(df, !is.na(a) & !is.na(b))