如何提取特定列不是dplyr中的数字的行

时间:2018-01-25 18:36:45

标签: r dplyr

这是我的数据框:

df <- data.frame(a = c(1:10),
                 b= c(11:15, NA, NaN, '', 20, 22))

a   b
1   11          
2   12          
3   13          
4   14          
5   15          
6   NA          
7   NaN         
8               
9   20          
10  22

我需要做的是提取行b中的值不是数字的行。 在这种情况下,我需要提取列a为7,8,9的行。我绝对需要一个适用于任何大型数据集的通用解决方案 我试过了:

df %>% filter(!is.numeric(b))

但它不起作用。我没有任何线索如何实现这一目标。提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

这将只留下具有数字的行:

基地R:

new <- df[!is.na(as.numeric(as.character(df$b))),]

如果从最左边的括号开始,它会将B列中的所有内容转换为字符,然后将其转换为数字。如果尝试将非数字转换为数字,则将其替换为NA。最后一块检查字符串是否为NA,如果是,则将其过滤掉。这都是基础R。

答案 1 :(得分:0)

将数据视为:

df <- data.frame(a = c(1:10),
                 b= c(11:15, NA, NaN, '', 20, 22))

我可以看到的第一个问题是b被读入作为因素,可以通过以下方式进行检查:

str(df)

给我们

'data.frame':   10 obs. of  2 variables:
 $ a: int  1 2 3 4 5 6 7 8 9 10
 $ b: Factor w/ 9 levels "","11","12","13",..: 2 3 4 5 6 NA 9 1 7 8

考虑到这一点,我们可以将您现有的方法调整为类似

df %>% 
  mutate( b = as.numeric(as.character(b))) %>%
  filter(is.nan(b) | is.na(b)) 

给了我们:

  a   b
1 6  NA
2 7 NaN
3 8  NA