【发布时间】:2020-05-10 05:51:18
【问题描述】:
在 R 中有没有办法找出一个值是否可以转换为数字格式?我通常使用type.convert(as.is=T) 将我的列转换为数字并执行数学函数。但是我当前的表有一些无法转换的值。我想在以“a”结尾的列中提取那些不包含数字可转换字符的非 NA 行。
数据
df <- data.frame(names=c("Shawn", "James", "Caleb", "David"), a_a=c("1",NA,"bad","1"),a_b=c("1",NA,"1","good"))
names a_a a_b 1 Shawn 1 1 2 James <NA> <NA> 3 Caleb bad 1 4 David 1 good
df %>%
filter_at(vars(ends_with("a")), any_vars(!is.na(.) & class(.) != "character")
期望的输出
names a_a a_b Caleb bad 1
【问题讨论】:
-
你需要
df %>% type.convert(as.is = TRUE) %>% filter_at(vars(ends_with('a')), any_vars(is.na(as.numeric(.)))) -
@akrun OP 仅使用列
a_a(第二列无关),并且第三行是唯一通过数字转换引入新NA的行; -
@Gregor - 恢复 Monica 我有更多的列和行。以“图表”结尾的 12000 行和 4 列。应该制作更好的样品。
-
是的,当然你有更多的数据。我认为令人困惑的是您在
a_b第 4 行中有“好”,“好”不能转换为数字,但它不会出现在您的预期输出中。很容易错过您显示 2 列但仅测试 1 列。