从 CSV 文件导入包含逗号的变量

Posted

技术标签:

【中文标题】从 CSV 文件导入包含逗号的变量【英文标题】:Importing Variables Containing Commas from CSV Files 【发布时间】:2021-12-28 21:10:53 【问题描述】:

我的数据是来自 Microsoft Excel 的 CSV 文件。该文件包含几个数字变量(例如薪水、体重),格式如下:123,456(123456)。

当我使用以下命令将该文件(“old_file”)导入 R 时:my_file = read.csv("old_file.csv"),所有数值变量都会自动转换为因子变量类型。

为了解决这个问题,我尝试在将文件导入R后,手动将这些变量转换为数值变量类型:

my_file$var_1 = as.numeric(my_file$var_1) 

但是,这样做似乎会“扭曲”数据。例如,自然出现的 0 的“var_1”值似乎消失了。我还绘制了这些数据的一些直方图,这些数字转换变量的分布与预期分布不匹配。

我可以通过打开 Excel 电子表格并单击“格式按钮”并从数字变量中删除“逗号”并在每个数字的末尾添加“.00”来解决此问题。例如,123,456 现在变为 123456.00。

一旦我在原始 Excel 电子表格中进行了此更改,问题就解决了。

我的问题: 有没有办法在 R 中解决这个问题,而不是在原始 Excel 电子表格中手动解决这个问题?我只是碰巧发现了这个格式错误——将来,有没有办法自动防止这种情况在 R 中发生?例如。确保“在 Excel 文件中显示为数字”的变量在 R 中作为数字类型导入的某种方法?

【问题讨论】:

@BigBen:谢谢你的回复!我不知道这个!我会记住这一点 - 谢谢! 【参考方案1】:

我相信这个问题可以通过将 excel 文件保存为 csv(应该在数字周围插入引号)然后使用 readr package 中的 read_csv() 函数读取文件来解决,例如

测试数据:

Value1,Value2
"123,456","456,678"
"234,567","445,678,899"
library(readr)
read_csv("~/Desktop/test.csv")
#> Rows: 2 Columns: 2
#> Warning in min(width - (crayon::col_nchar(types) + nchar(counts) + 4)): no non-
#> missing arguments to min; returning Inf
#> ── Column specification ────────────────────────────────────────────────────────
#> 
#> ℹ Use `spec()` to retrieve the full column specification for this data.
#> ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
#> # A tibble: 2 × 2
#>   Value1    Value2
#>    <dbl>     <dbl>
#> 1 123456    456678
#> 2 234567 445678899

数字现在是数字(双精度整数)。

与 read.csv() 函数相比:

read.csv("~/Desktop/test.csv")
#>    Value1      Value2
#> 1 123,456     456,678
#> 2 234,567 445,678,899

(数字格式不正确)

【讨论】:

@j ared_mamrot:谢谢您的回复!我的 excel 文件最初保存为 CSV - 如果我运行您的代码,有没有办法将这些数字导入为“数字”而不是“整数”?谢谢! 我相信这段代码可以满足你的要求:如果你使用df &lt;- read_csv("file.csv") 那么str(df) 导入数字的类是“数字”。参见例如faculty.nps.edu/sebuttre/home/R/data.html 了解 R 中不同类的更多详细信息

以上是关于从 CSV 文件导入包含逗号的变量的主要内容,如果未能解决你的问题,请参考以下文章

导入带有“当其中一些包含”以及逗号的值的 CSV 文件

将 CSV 文件导入 SQL Server

SQLite 在文本字段中使用逗号导入 csv 文件

将带逗号的双引号作为分隔符从 S3 导入 Amazon Redshift

导入包含逗号、千位分隔符和尾随减号的 CSV 数据

python 从KeepassX转换导出的XML文件,可以将其导入1Password(通过CSV逗号分隔文件)