【问题标题】:R not reading a csv file correctlyR没有正确读取csv文件
【发布时间】:2020-07-27 18:56:01
【问题描述】:

从 R 读取 csv 文件时遇到问题。当我从 csv 文件导入数据集时,数字列(或至少应该是数字列)将作为字符导入并在末尾添加 \r。例如,一个二进制性别变量被读取为男性的“1\r”和女性的“2\r”。起初我认为从 Github 读取它是问题,但即使从本地文件读取它,也没有任何改变。

我已经尝试了 stringsAsFactors = FALSE 选项,并且 NA 不是问题,因为该列没有 NA 值。我还尝试将列类型设置为numberfrom Excel。没有任何效果。这是我的代码:

library(tidyverse) 
library(cowplot)
library(kableExtra)
library(knitr) 
library(lubridate)
library(dplyr) 
library(moments) 
library(readr)
library(rgdal)
library(broom)
library(scales)
library(lemon)
library(ggplot2)
library(survey)
knit_print.data.frame <- lemon_print

#Lectura de Datos y Diccionario
options(stringsAsFactors=F)


df <-  read_csv("https://raw.githubusercontent.com/pablolopez2733/Aplicada1/master/Bases%20de%20Datos/conjunto_de_datos_envipe2019_csv/conjunto_de_datos_TPer_Vic2_ENVIPE_2019/conjunto_de_datos/conjunto_de_datos_TPer_Vic2_ENVIPE_2019.csv")

df$SEXO


产生: output

链接到 csv:https://raw.githubusercontent.com/pablolopez2733/Aplicada1/master/Bases%20de%20Datos/conjunto_de_datos_envipe2019_csv/conjunto_de_datos_TPer_Vic2_ENVIPE_2019/conjunto_de_datos/conjunto_de_datos_TPer_Vic2_ENVIPE_2019.csv

【问题讨论】:

  • 我认为问题出在文件上。更容易阅读文件摆脱“\r”,然后将目标列转换为数字。您是否事先知道要将哪些列转换为数字?
  • 呵呵,文件82MB!尽管如此,我刚刚下载它并注意到它没有单个换行符(wc -l 产生 0),并且确实许多字段在分隔逗号之前附加了回车符 (\r)。此文件的格式似乎不正确。
  • @HarroCyranka 是的,我知道哪些列需要是数字。没想到你的建议。让我尝试。任何有关脚本建议的帮助都会受到欢迎。
  • 然后会发布答案。

标签: r csv import


【解决方案1】:

根据 OP 的评论,这段代码应该可以工作:

library(tidyverse)


##Read the file and get rid of carriage trails in all variables


df <-  read_csv("https://raw.githubusercontent.com/pablolopez2733/Aplicada1/master/Bases%20de%20Datos/conjunto_de_datos_envipe2019_csv/conjunto_de_datos_TPer_Vic2_ENVIPE_2019/conjunto_de_datos/conjunto_de_datos_TPer_Vic2_ENVIPE_2019.csv") %>%
    mutate_all(.funs = ~str_replace_all(.,"[\r]",""))

##Mutate a single variable    
df_mutate_single <-  df %>% 
    mutate(SEXO = parse_number(SEXO)) 

#Use mutate at to pass a vector of variables to convert to numeric

df_mutate_at <- df %>%
    mutate_at(c("AP6_1_2","AP6_1_2", "EDAD"), .funs = ~parse_number(.))

【讨论】:

    【解决方案2】:

    如果您已经在使用stringsAsFactors = FALSE,但仍然无法使用,请尝试添加

    strip.white = TRUE
    

    也可以作为参数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-13
      • 1970-01-01
      • 1970-01-01
      • 2022-12-30
      • 1970-01-01
      • 2020-03-11
      • 1970-01-01
      相关资源
      最近更新 更多