【问题标题】:How to convert dataframe from Charachter to Numeric如何将数据帧从字符转换为数字
【发布时间】:2021-12-10 05:20:05
【问题描述】:

我知道这个问题可能会重复,但我尝试了所有解决方案:

How to convert entire dataframe to numeric while preserving decimals?

https://statisticsglobe.com/convert-data-frame-column-to-numeric-in-r

但是没用

我从我的电脑手动导入了 excel 数据:

文件>导入数据>excel,我将数据类型设置为数字

我检查了我的数据使用

View(Old_data) 

数字类型也是如此

head(Old_data)
             QC_G.F9_01_4768   QC_G.F9_01_4765
M95T834        70027.02          69578.19   
M97T834        95774.14          81479.30
M105T541       75686.39          68455.65
M109T834       72093.07          70942.65
M111T834_2     77502.98          77527.54
M114T834       68132.06          70296.73
M121T834       52233.05          56074.64
M125T834       44559.99          35831.79
M128T834       59257.48          59574.73
M135T834       105136.55         105274.98

但在数据之后,我使用 R 将行转换为列,将列转换为行:

New_data <- as.data.frame(t(Old_data))

当我使用以下方法检查我的新数据时:

View(New_data)

我发现我的列是字符类型而不是数字

我尝试将 New_data 转换为数字

New_data_B -> as.numeric(New_data)

我检查了我的数据使用

dim(New_data_B)

17 1091

这是我的数据示例

New_data_B

#>                     Name    MT95T843     MT95T756
#> 1        QC_G.F9_01_4768 70027.02132  95774.13597
#> 2        QC_G.F9_01_4765 69578.18634  81479.29575
#> 3        QC_G.F9_01_4762 69578.18634  87021.95427
#> 4        QC_G.F9_01_4759 68231.14338  95558.76738
#> 5        QC_G.F9_01_4756 64874.12936  96780.77245
#> 6        QC_G.F9_01_4753 63866.65780  91854.35304
#> 7  CtrF01R5_G.D1_01_4757 66954.38799 128861.36163
#> 8  CtrF01R4_G.D5_01_4763 97352.55229 101353.25927
#> 9  CtrF01R3_G.C8_01_4754 61311.78576   7603.60896
#> 10 CtrF01R2_G.D3_01_4760 85768.36117 109461.75445
#> 11 CtrF01R1_G.C9_01_4755 85302.81947 104253.84537
#> 12 BtiF01R5_G.D7_01_4766 61252.42545 115683.73755
#> 13 BtiF01R4_G.D6_01_4764 81873.96379 112164.14229
#> 14 BtiF01R3_G.D2_01_4758 84981.21914      0.00000
#> 15 BtiF01R2_G.D4_01_4761 36629.02462 124806.49101
#> 16 BtiF01R1_G.D8_01_4767     0.00000 109927.26425
#> 17                    rt    13.90181     13.90586

我也将我的数据转换为 csv 文件并将其导入:

Old_data <- as.data.frame(read.csv("data.csv" , sep="," , header=TRUE,stringsAsFactors=FALSE))

并且还使用:

#install.packages("readxl")
library("readxl")
Old_data <- read_excel("data.xlsx")

我尝试了sveer先生建议的解决方案

New_data <- cbind(Name=Old_data[1,],as.data.frame(t(Old_data[-1,])))

它给出了这个结果

head(New_data)

当我尝试时

 View(New_data)
     Name.QC_G.F9_01_4768   Name.QC_G.F9_01_4765
      70027.02                69578.19   
      95774.14                81479.30
      75686.39                68455.65
      72093.07                70942.65
      77502.98                77527.54
      68132.06                70296.73
      52233.05                56074.64
      4559.99                 35831.79
      59257.48                59574.73
      105136.55               105274.98

它会删除行名!

我只是对这个问题感到困惑,我认为问题是因为我将行转换为列,将列转换为行

请告诉我任何澄清以及我是否可以将数据发送给某人以便他可以尝试 非常感谢

【问题讨论】:

  • 当你使用read.csv时,你不必使用as.data.frame。您使用的是哪个版本的 R? Name 列的元素是字符串。您可能只想转换 Name 旁边的两列,例如 library(dplyr); New_data_B &lt;- New_data_B %&gt;% mutate(MT95T843 = as.numeric(MT95T843), MT95T756 = as.numeric(MT95T756))
  • 感谢您的评论,是的,我尝试了这个解决方案,但没有成功,我使用了 mutate_all 函数,因为我有 1091 列,而不仅仅是两列
  • New_data_B[is.na(New_data_B),] &lt;- 0; New_data_B &lt;- bind_cols(New_data_B %&gt;% select(Name), New_data_B %&gt;% select(-Name) %&gt;% mutate_all(as.numeric)

标签: r dataframe statistics


【解决方案1】:

你得到字符类型而不是数字的原因:

传输数据将导致matrixmatrix 只能接受一个类,即。混合类时的字符。

解决方案:

我仍然不确定您的数据结构。添加reproducible example 总是一个好主意,如果数据很大,您也可以使用 pastebin 或仅使用reproduce,如所述。

我假设当您通过以下方式加载数据时:文件 > 导入数据 > excel 第一列称为“名称”。

要获得所需的输出(尤其是行名),您可以尝试:

setNames(as.data.frame(t(Old_data[,-1])),Old_data[[1]]) -&gt; df

如果要将行名转换为列:

tibble::rownames_to_column(df, "Name")

【讨论】:

  • 谢谢你的回答,它给出了这个错误信息:“arguments imply different numbers of lines: 1091, 17”
  • 您好 captcoma 先生,我刚刚编辑了我的问题并添加了您的问题,谢谢
  • @Anouar 我编辑了代码。如果它不起作用,请添加一个可重现的数据集。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-13
  • 2018-11-03
  • 1970-01-01
  • 1970-01-01
  • 2017-07-14
  • 1970-01-01
  • 2020-06-10
相关资源
最近更新 更多