我正在尝试删除一行,条件是该行在基于同一列的另一行中没有特定值。 (如果CASEID没有相关表格8,则删除CASEID) 例如
Form CASEID
7 001
8 001
8 001
7 002
7 003
8 003
8 003
我试图寻找答案,但找不到答案。我觉得我需要一个if语句,但是我的同事建议了一个子集函数。任何帮助将不胜感激!
答案 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