繁体   English   中英

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

[英]Remove a row based on conditional value of other rows in multiple columns in r

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

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

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

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

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

这是我可以想到的两个解决方案。 一个使用子集,另一个使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM