【问题标题】:Cleaning Up Dataframe: NA, Decimals, Strings, Mixtures,清理数据框:NA,小数,字符串,混合,
【发布时间】:2016-02-11 21:04:20
【问题描述】:

我有一个我想在 R 中处理的 data.frame。它完全搞砸了!我专注于 1 列,它应该包含数值。当然有一些 NA,还有字符串(例如“none”、“no Thanks”),除此之外还有数字答案,如“

我该如何处理所有这些问题?我还不需要任何插补。是否有命令忽略 R 中这一列的所有非数字行?

更新

# convert all decimal separators
group <- lapply(group, function(x) sub(',', '.', x))
# transform any non-numeric into NA 
group <- lapply(group, as.numeric)
# remove all old and new NAs
group <- data.frame(group)  
group_final <- na.omit(group)

非常感谢:)

【问题讨论】:

  • as.numeric 为所有未被识别为数字的内容生成NA-values。为什么不把它和na.omit 结合起来呢?

标签: r missing-data


【解决方案1】:

我们可以在read.csv/read.table 中使用na.strings。它可以将值作为向量。例如,

 df1 <- read.csv('yourfile.csv', na.strings=c('none', 'no thanks'))

这不会处理"&lt;1""1-2" 等。目前尚不清楚 OP 想要如何处理这些问题。如果需要将小数分隔符更改为单个,请尝试

df1[] <- lapply(df1, function(x) sub(',', '.', x))

【讨论】:

  • 原始数据比较复杂,有没有办法让“na.strings”在我后续的单个data.frame列上工作?
  • @Mac 正如我在解决方案中所说,这不会解决所有问题。如果您有特定的值需要更改为 NA,可以在na.strings 中指定。但是,如果值为&lt;1&lt;5 等,在您读取数据集后,as.numeric(df1$yourcolumn) 会将那些非数字值更改为NA
  • 对不起,很久以前我用过 R.as.numeric 返回错误“错误:(列表)对象不能被强制输入'double'”。原则上,我想在一个步骤中删除/转换所有非数字并在第二步中删除它们。但似乎有一个小问题:/
  • @Mac 你不能在整个数据集上使用as.numeric,而是尝试lapply(df1, as.numeric),会有一个友好的警告
  • 啊好吧,这行得通!如果我想将“,”转换为“。”提前,为了不丢失那些数据?我应该使用 sub(',', '.', x)?你能给我一个小的解释这个函数是如何工作的吗?非常感谢
猜你喜欢
  • 2020-09-11
  • 2023-03-16
  • 2013-09-18
  • 1970-01-01
  • 2021-11-03
  • 1970-01-01
  • 2018-02-07
  • 2018-04-23
  • 1970-01-01
相关资源
最近更新 更多