【问题标题】:Replacing missing values in a dataset with a numeric?用数字替换数据集中的缺失值?
【发布时间】:2013-10-04 21:30:43
【问题描述】:

我已使用 read.xlsx 命令将数据电子表格导入 R,但数据中散布了标记为 Low 的元素,因为它们没有被正确测量。

因此数据中的示例列如下所示:

[15, 6, Low, 23, 39, Low]

我想用数值替换 Low 元素,但是当我尝试如下命令时:

data[3,2] <- 4 #.....我收到以下错误消息:

Warning message: 
In '[<-.factor '('*tmp*', iseq, value = 4): invalid factor level, NAs generated.

我尝试了as.numericas.characteras.factor 的各种组合,但没有一个能绕过这个错误消息。

有人告诉我这样做的方法是将 Low 元素转换为缺失值,但是当我这样做并尝试用数字替换 NA 时,我仍然收到相同的错误消息!

【问题讨论】:

  • 在导入数据之前设置option(stringsAsFactors=FALSE)。但是,您最终会得到一个字符变量,在进行任何计算之前您需要将其强制转换为数字。此外,将Low 值设置为NA(表示未知值)并保持不变。 R 带有处理NA 的设施。 read.table(和其他数据导入功能)带有一个na.strings 参数,允许在导入期间将Low 强制转换为NA
  • Cross posting 没有说明你这样做被认为是粗鲁的。

标签: r missing-data


【解决方案1】:

因子是一种只接受预定义值的变量。所以如果你有以下因素:

fac <- factor(c("15","6","Low","23","39","Low"))

那么预定义的一组值是:

R> levels(fac)
[1] "15"  "23"  "39"  "6"   "Low"

如果你想将"4" 归为一个价值,你要么必须改变你的因素标签:

R> factor(fac, levels=c("15","23","39","6","Low"), labels=c("15","23","39","6","4"))
[1] 15 6  4  23 39 4 

或者先转换成字符向量:

R> v <- as.character(fac)
R> v[v=="Low"] <- "4"
R> v
[1] "15" "6"  "4"  "23" "39" "4" 

【讨论】:

  • 效果很好。再多 1 个查询:如果“低”在数据中的显示方式不同,因此您不能总是使用 v=="Low" 来获取它,您会怎么做 例如:data = [5 6 Lowtmp', iseq, value = 4): 无效因子水平,NAs 生成。
  • 您在致电grep 之前是否使用过as.character(v)
  • 啊,解决了!谢谢
猜你喜欢
  • 1970-01-01
  • 2019-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多