根据r中多列中其他行的条件值删除行

时间:2018-07-10 15:50:08

标签: r

我正在尝试删除一行,条件是该行在基于同一列的另一行中没有特定值。 (如果CASEID没有相关表格8,则删除CASEID) 例如

Form  CASEID  
7        001  
8        001  
8        001  
7        002  
7        003  
8        003  
8        003  

我试图寻找答案,但找不到答案。我觉得我需要一个if语句,但是我的同事建议了一个子集函数。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

new_df <- subset(df, Form==8)

subset函数的第二个参数是一个逻辑表达式,就像您提到的 if 语句一样。在这里,我们根据行的表单列是否等于8来对行进行子集设置。

答案 1 :(得分:1)

这是我能想到的两个解决方案。一个使用子集,另一个使用dplyr的inner_join()

解决方案之间的区别在于,在选项1中,保留了重复的行和原始顺序,在选项2中,删除了重复的行。

解决方案1-使用子集并保留重复的行:

df[df$CASEID %in% subset(df, Form == 8)$CASEID, ] 

结果是:

  Form CASEID
1    7      1
2    8      1
3    8      1
5    7      3
6    8      3
7    8      3

解决方案2-使用inner_join()

library(dplyr)
subset(df, Form == 8) %>% 
      select(CASEID) %>% 
      inner_join(df) %>% 
      select(Form, CASEID) %>% 
      distinct()

结果是:

  Form CASEID
1    7      1
2    8      1
3    7      3
4    8      3