R 删除重复行检查多列中的重复值,并保留不存在NA值的行

R 删除重复行检查多列中的重复值,并保留不存在NA值的行,r,dplyr,data-manipulation,R,Dplyr,Data Manipulation,我扫描stackoverflow一个多小时以找到解决方案,但失败了。因此,发布问题 我有一个数据帧,需要从中删除重复项,但诀窍是,重复值可以位于两个不同的列中,用于不同的行。我需要删除另一列具有NA值的行 示例数据帧 Act Func Func_2 generate numbers odd generate numbers and generate print <NA> generate column print di

我扫描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>
Act    Func     Func_2 
generate numbers    odd           
generate numbers   and
generate column     print
displays date       time
displays print      time
displays task       <NA>
Act Func Func_2
生成奇数
生成数字和
生成打印
生成列打印
显示时间
显示日期和时间
显示打印时间
显示任务
由于print在Func和Func_2中都存在,并且两行中的Act值相同,因此我需要删除Func_2中存在NA的行。 但是,如果Act列中的值不同,则需要保留这两行

预期数据帧

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>
Act    Func     Func_2 
generate numbers    odd           
generate numbers   and
generate column     print
displays date       time
displays print      time
displays task       <NA>
Act Func Func_2
生成奇数
生成数字和
生成列打印
显示日期和时间
显示打印时间
显示任务

这就是你想要的吗

library(dplyr)
生成数据帧:

a <- c(1, 2, 3, 4)
b <- c(5, 6, NA, 7)
df <- data.frame(a, b)
a在这里试试这个:

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 
df1%>%group_by(Act)%>%
变异(测试=if_else(Func%在%Func_2中),
如果else(is.na(Func_2)、FALSE、TRUE),
TRUE))%>%
#这将创建一个逻辑帮助器列。
过滤器(test==TRUE)#只是为了完整性
#一个tibble:6x4
#团体:法案[2]
Act Func Func_2测试
1生成奇数T
2生成数字和T
3生成列打印T
4显示日期时间T
5显示打印时间T
6显示任务T

看看
na.omit()
。顺便说一句:请使用
dput()
显示您的数据或数据帧的定义。@jogo您可能知道
https://alistaire47.github.io/read.so/
已经。。。但我同意。NinjaR,示例数据帧不适合您的要求,因此这里的混乱是您想要什么。。。(我猜)。为什么不在“act”中添加另一行,该行的值与“generate”的值不同,整个要点应该更清楚…@Tjebo-谢谢你的建议。我理解这种困惑。我已经编辑了这个问题。请你现在调查一下好吗。任何帮助都将是伟大的,因为我仍然被困在这个。非常感谢。工作起来很有魅力。