【问题标题】:R inserts 1 additional obs. and 1 additional var. when reading csvR 插入 1 个额外的 obs。和 1 个额外的变量。读取 csv 时
【发布时间】:2020-09-25 12:12:04
【问题描述】:

将我的 CSV 文件上传到 r 时,会在数据框中添加一行和一列,尽管这些行在 CSV 文件中是空的。数据框应该有 2005 obs。和 49 个变量。但是在上传时,它会产生一个带有 2006 obs 的数据框。和 50 个变量。此外,有些字段在上传后由 r 填充 NA。

这是我用于将文件上传到 r 的代码:

Dev_REITs_MTBV <- read.csv2("Developed_REITS_MTBV.csv", na="NA")

这是 csv 文件:

https://gofile.io/d/7jzEub

上传前运行的代码:

pkgs <- c("readxl","akima","rgl","scatterplot3d","car","MASS","ISLR","stargazer","urca","rpart","ggplot2","e1071","randomForest",
          "quantreg","mgcv","gamlss","rlang","gplots","psych","ggridges","viridis","caTools","caret","forecast", "shape", "diagram", 
          "writexl", "openxlsx", "maptools", "ggridges", "calibrate", "modelr", "XLConnect")
for (pkg in pkgs) {if (! (pkg %in% rownames(installed.packages()))) { install.packages(pkg) }}
lapply(pkgs, require, character.only = TRUE)

这是我输入的 CSV 行和列的图片以及生成的数据框:

Empty row CSV

Empty column CSV

Unwanted data frame row

Unwanted data frame column

非常感谢您的帮助!

【问题讨论】:

  • 嗨康纳!像这样帮助你真的很难。使用文本阅读器(如记事本或记事本++,而不是 Excel!)打开您的 CSV,并在此处复制前两行和最后两行。从那里我们可以深入研究问题
  • 感谢江户的快速回复。我已将 csv 文件添加到原始问题中。
  • 我用你的数据运行你的代码,我没有问题。我得到一个包含 2305 行和 49 列的数据框。尝试使用 rm(list=ls(all.names=TRUE)) 清理您的环境并使用组合 CTRL + SHIFT + F10 重新启动 R(在 Windows 上)
  • 为了将来参考,以这种方式共享 csv 并不是最佳做法。您应该按照我的建议将 4 行复制到您的问题中。
  • @ConnorUhl 对我来说,Dev_REITs_MTBV &lt;- read.csv2("https://srv-file8.gofile.io/downloadStore/srv-store4/7jzEub/Developed_REITS_MTBV.csv") 也可以正常工作,没有问题。因此,您在问题中描述的问题不可重现。

标签: r dataframe csv upload rows


【解决方案1】:

你试过 tidyverse 中的read_csv() 吗?如果没有实际文件,这可能很难解决,但尝试另一个包可能会解决它。你也可以试试 data.table 包中的fread()

稍后编辑/添加:

您的数据非常混乱(使用 ',' 而不是 '.' 作为小数分隔符和 ';' 和列分隔符,在最后一列中有一大堆尾随逗号,并且有数字(年份)作为变量名。但是,这段代码应该可以修复它:

library(tidyverse) # you need dplyr 1.0.0 or later

# load data
dataset <- read_delim("Developed_REITS_MTBV.csv", delim = ";") %>%
  # rename final column
  rename(`2019` = `2019,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,`) %>%
  # delete all trailing commas in last column (but not the first one)
  mutate(`2019` = gsub("^,*|(?<=,),|,*$", "", `2019`, perl = T)) %>%
  # name the year columns numeric after switching the commas to points
  mutate(across(c(`1980`:`2019`), ~as.numeric(gsub(",", ".", .))))

部分代码来自:Removing multiple commas and trailing commas using gsub

【讨论】:

  • 对这个答案投反对票的人应该已经解释了原因......但是,我认为问题在于这更多的是评论而不是问题的真正答案。
  • 感谢 L Smeets 的快速帮助。我已将 CSV 文件添加到原始问题中。
  • 好的,我现在添加了一个真实的答案
猜你喜欢
  • 2016-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多