r - 将多列从因子转换为数字,但在 R 中获得 NA
问题描述
假设以下数据框df
:
df <- structure(list(`week1` = structure(c(number = 4L,
area1 = 1L, area2 = 2L, price1 = 3L,
price2 = 5L), .Label = c("154.93", "304.69", "3554.50",
"49", "7587.22"), class = "factor"), `week2` = structure(c(number = 3L,
area1 = 1L, area2 = 4L, price1 = 2L,
price2 = 5L), .Label = c("28.12", "2882.91", "30",
"44.24", "4534.47"), class = "factor")), class = "data.frame", row.names = c("number",
"area1", "area2", "price1",
"price2"))
我正在尝试将其week1
和week2
列从factor
转换为numeric
:
cols = c(1, 2)
df[, cols] <- as.numeric(as.character(df[, cols]))
# df[cols] <- lapply(df[cols], as.numeric) # gives incorrect results
出去:
但它NA
会为这些列返回 s 或不正确的结果。但是,以下代码给出了正确答案:
cols = c(1, 2)
df[, cols] = apply(df[, cols], 2, function(x) as.numeric(as.character(x)))
df
出去:
为什么我得到NA
适用于这种情况的第一个解决方案?谢谢。
解决方案
as.character
/as.numeric
需要一个向量作为输入。随着df[, cols]
您将数据框传递给它(检查class(df[, cols])
)。
如果您在链接中谈论已接受的答案,它会说要更改for
循环中的代码,并且不建议传递整个数据帧。要更改多列的类别,您可以使用for
循环apply
或lapply
.
df[cols] <- lapply(df[cols], function(x) as.numeric(as.character(x)))
推荐阅读
- javascript - 我是使用 Knockout js 的新手,我尝试显示一个列表,但出现以下错误
- angular - 如何更改 Angular 中的二级路由?
- python - 无法从当前目录导入 .pyc 文件
- database - 计算内存块中的可用空间
- python - 在python中使用卡方检验对一列进行正态性检验
- java - 带有 javafx-fxml.jar 的 Intellij 和 openjdk 8 在 linux mint 中无法正常工作
- bash - aws s3 cli 与实时观看文件夹同步
- excel - 如何在 For .. Do 循环中重置变量?
- php - WooCommerce 预购产品的条件标签
- android - 在带有图像的自定义按钮中添加边距