这是我的数据框:
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))
但它不起作用。我没有任何线索如何实现这一目标。提前感谢您的帮助。
答案 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