当变量等于0而不是NA时,或者当R中两列等于NA时,擦除行

时间:2020-03-31 14:46:20

标签: r dataframe

我有一个数据集df,看起来像这样

rel freq key
1.1 1.1 a       
1   1   b       
1   NA  c       
NA  NA  d       
NA  0   e       
NA  1   f

我想获得这个:

rel freq key
1.1 1.1 a       
1   1   b       
1   NA  c               
NA  1   f

基本上,我想摆脱freq = 0的行或relfreq都等于NA的行。

我尝试了

df <- df[df$freq!=0,] 

过滤掉freq = 0,但这给了我一些问题

类似

library(dplyr)
df <- filter(df, freq != 0)

使用freq = NA消除所有行

关于如何解决此问题的任何建议?

2 个答案:

答案 0 :(得分:2)

尝试:

subset(df, !(freq == 0 & !is.na(freq) | (is.na(freq) & is.na(rel))))

输出:

  rel freq key
1 1.1  1.1   a
2 1.0  1.0   b
3 1.0   NA   c
6  NA  1.0   f

或在dplyr中:

dplyr::filter(df, !(freq == 0 & !is.na(freq) | (is.na(freq) & is.na(rel))))

答案 1 :(得分:1)

df[!(!is.na(df$freq) & df$freq == 0 | (is.na(df$freq) & is.na(df$rel))),]

#   rel freq key
# 1 1.1  1.1   a
# 2 1.0  1.0   b
# 3 1.0   NA   c
# 6  NA  1.0   f

数据

df <- data.frame(rel = c(1.1, 1, 1, NA, NA, NA),
                 freq = c(1.1, 1, NA, NA, 0, 1),
                 key = letters[1:6])

相关问题