【问题标题】:Change a character column to numeric in a data frame将数据框中的字符列更改为数字
【发布时间】:2022-01-15 20:58:17
【问题描述】:

我想将数据框中的列从字符更改为数字。 我的数据框是一个 .txt 文件,有 12 列和 1000 行。 当我将 .txt 文件传递​​给 R 时,我的一列现在是字符。 我尝试使用

as.numeric(my_data$iw)

但我收到“警告消息:

强制引入的NAs

这里是数据框结构:

data.frame':   1000 obs. of  12 variables:
 $ im : num  0 15396 16537 20252 17967 ...
 $ iw : chr  "20064.97" "7397.191" "18380.77" "14042.25" ...
 $ r  : num  5984 0 0 0 0 ...
 $ am : num  0 42 33 38 24 62 27 38 0 29 ...
 $ af : num  38 30 28 38 39 42 18 33 24 35 ...
 $ a1c: num  0 1 1 1 1 0 0 1 0 1 ...
 $ a2c: num  0 0 0 1 0 0 0 1 0 1 ...
 $ a3c: num  0 0 0 0 0 0 0 1 0 0 ...
 $ a4c: num  0 0 0 0 0 0 0 0 0 0 ...
 $ a5c: num  0 0 0 0 0 0 0 0 0 0 ...
 $ a6c: num  0 0 0 0 0 0 0 0 0 0 ...
 $ a7c: num  0 0 0 0 0 0 0 0 0 0 ...

我可以改成gsub吗?

structure(list(im = c(0, 15395.61, 16536.74, 20251.87, 17967.04, 
12686.43, 16833.22, 16919.34, 0, 20515.88, 17991.9, 15528.29, 
16683.96, 14485.19, 17957.98, 19923.31, 13526.9, 16516.68, 16337.52, 
12904.97, 17418.99, 12419.21, 14561.9, 12309.77, 21138.87, 0, 
17315.74, 17762.09, 12678.82, 13883.37, 11140.66, 16502.91, 18293.78, 
12533.36, 16536.61, 4336.741, 22449.17, 16532.1, 0, 15905.14, 
0, 8542.03, 12589.29, 15154.76, 15441.59, 18575.05, 15915.47, 
0, 15085.51, 16597.42, 15358.47, 22480.95, 10555.28, 21771.2, 
22863.56, 15937.55, 12230.58, 17814.67, 7972.471, 10286.75, 15335.8, 
10762.59, 18583.2, 12167.99, 21723.37, 15670.79, 13045.83, 13305.73, 
14305.99, 10353.15, 4504.009, 10157.7, 15967.28, 23640.21, 15053.78, 
21404.11, 8509.353, 15693.39, 9009.99, 17249.29, 9115.844, 16057.39, 
14069.93, 0, 0, 16840.09, 0, 15289.29, 12223.93, 13048.58, 18524.13, 
14344.22, 20658.66, 0, 0, 13984.69, 21636.72, 13969.12, 12919.83, 
13214.16, 17066.98, 20060.25, 11414.15, 12907.53, 11289.97, 17600.97, 
14741.77, 12089.57, 13603.85, 9330.662, 0, 16191.81, 12029.75, 
12666.29, 8138.166, 10636.2, 22570.1, 12833.66, 12585.56, 20197.42, 
12621.56, 19021.65, 9948.49, 25772.41, 15102.54, 19225.57, 11188.96, 
11707.66, 9766.824, 16082.82, 17693.2......

为了读入 .txt 文件,我写道:

my_data <- read.table("project.txt", header=TRUE);

【问题讨论】:

  • 检查 unique(my_data$iw) 以确认值实际上是数字。警告消息表明某些值无法转换为数值,因此它们将转换为 NA。解决此问题的策略取决于您要如何处理非数字值。
  • 嗨,玛丽安蒂!你能提供一个minimal reproducible example吗?包含数据样本非常重要:您可以在数据上使用dput() 来执行此操作。另外,请包含您用于加载数据的代码
  • 它们不是数字。它们是字符。我想更改它们以便在功能中使用它们。所以他们不能是字符,因为我的功能不起作用..

标签: r numeric


【解决方案1】:

正如一些 cmets 已经说过的,这是因为有些行不能强制转换为数字。对缺失数据的不恰当描述,或者可能是逗号来表示小数,如

expl <- read.table(text = "1.0  2.0  2,3
                           2.0  2.1  2.5
                           .    2.2  2.1")
str(expl)

导致

> str(expl)
'data.frame':   3 obs. of  3 variables:
 $ V1: chr  "1.0" "2.0" "."
 $ V2: num  2 2.1 2.2
 $ V3: chr  "2,3" "2.5" "2.1"

出于上述原因。

在 1000 行中找到罪魁祸首并不总是那么容易,但这样的事情可能会有所帮助:

> which(is.na(as.numeric(expl$V1)))
[1] 3

这将为您提供在转换中产生NA 的行号。

【讨论】:

  • 非常感谢!我找到了罪魁祸首并删除了这一行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-18
  • 1970-01-01
  • 1970-01-01
  • 2020-07-15
  • 2013-03-02
  • 2016-06-29
  • 2010-10-06
相关资源
最近更新 更多