首页 > 解决方案 > 将多列从因子转换为数字,但在 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"))

我正在尝试将其week1week2列从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适用于这种情况的第一个解决方案?谢谢。

标签: rdataframetype-conversion

解决方案


as.character/as.numeric需要一个向量作为输入。随着df[, cols]您将数据框传递给它(检查class(df[, cols]))。

如果您在链接中谈论已接受的答案,它会说要更改for循环中的代码,并且不建议传递整个数据帧。要更改多列的类别,您可以使用for循环applylapply.

df[cols] <- lapply(df[cols], function(x) as.numeric(as.character(x)))

推荐阅读