【问题标题】:How can I know WHICH NAs were introduced by coercion?我怎么知道强制引入了哪些 NA?
【发布时间】:2019-08-12 21:41:45
【问题描述】:

我有一个有点凌乱的数据集要清理。一些操作通过强制引入 NA,但即使没有,数据集也包含许多 NA。如何确定哪些行或元素引入了 NA。

例如

a <- c(1,2,"three", rep(NA, times=10))
as.numeric(a)
 [1]  1  2 NA NA NA NA NA NA NA NA NA NA NA
Warning message:
NAs introduced by coercion 

导致将第三个元素强制为数字。有没有办法确定它是导致这种情况的第三个元素,而不是其他 NA(非)值?谢谢!

【问题讨论】:

  • 嗯,好的,这绝对适用于这个确切的场景,但我希望可能有更通用的解决方案(例如warnings())。在我的情况下,我使用read_xlsx() 生成一个小标题,然后我需要替换一些已知的有问题的字符串,我使用str_replace() 来做。这会生成警告Warning message: In function_list[[k]](value) : NAs introduced by coercion,因此警告和生成它的函数是模糊的。是否有解决此问题的一般方法或强制 R 给我生成警告的行号的方法?我的前任。太简单了,我觉得
  • 我不能这样做,因为那样我会丢失那些数据。我想读入该数据,然后对其进行更改,以便我可以将字段强制转换为数字。
  • 谢谢!我想我可以根据你的建议做点什么。我正在尝试制作一个新示例,但在这样做时,我自己的代码工作得很好,这正是困难所在——我不确切知道导致问题的数据是什么——所以我无法重现它。不管怎样,我会用你的建议来帮助侦探。谢谢!

标签: r validation na


【解决方案1】:

试试

which(is.na(as.numeric(a)) != is.na(a))
3
# Warning message:
# In which(is.na(as.numeric(a)) != is.na(a)) : NAs introduced by coercion 

【讨论】:

  • 另外,which(!is.na(a) &amp; is.na(as.numeric(a))) 虽然不确定这是否真的有什么不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-12
  • 1970-01-01
  • 2015-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多