如何使用正确的列类型将CSV文件导入R

时间:2019-06-05 23:34:51

标签: r csv import

我的test.csv文件是:

a;b;c
x;;
y;1.2;3
z;2.4;5

我尝试使用以下脚本将此文件导入数据框test

library(readr)
test <- read_delim("data/test.csv", 
                        ";", escape_double = FALSE,
                        na = c("empty",""),
                        col_types = cols(.default = col_character()),
                        trim_ws = TRUE)

但是变量bc应该是numeric,但是应该是character。我试图更改col_types,但没有结果。 编辑:这是一个更现实的示例:

Country/Territory;WBCode;Estimate;StdErr
Aruba;ABW;;
Andorra;ADO;1,32;0,48
Afghanistan;AFG;-1,29;0,34 

2 个答案:

答案 0 :(得分:2)

改为使用read.csvread.table

text <- "a;b;c
         x;;
         y;1.2;3
         z;2.4;5"

df <- read.csv(text = text, sep =";", stringsAsFactors = FALSE)

str(df)
#'data.frame':  3 obs. of  3 variables:
# $ a: chr  "x" "y" "z"
# $ b: num  NA 1.2 2.4
# $ c: int  NA 3 5

根据更新后的示例,您可以在dec中用read.csv指定小数点

text = "Country/Territory;WBCode;Estimate;StdErr
        Aruba;ABW;;
        Andorra;ADO;1,32;0,48
        Afghanistan;AFG;-1,29;0,34" 

read.csv(text = text, sep = ";", dec = ",", stringsAsFactors = FALSE)

#  Country.Territory WBCode Estimate StdErr
#1             Aruba    ABW       NA     NA
#2           Andorra    ADO     1.32   0.48
#3       Afghanistan    AFG    -1.29   0.34

答案 1 :(得分:2)

根据您更新的示例,看起来造成问题的原因是CSV使用,作为十进制标记。您可以通过以下方式阅读它:

readr::read_delim("test.csv", ";", 
                  locale = locale(decimal_mark = ","))

这将产生:

# A tibble: 3 x 4
  `Country/Territory` WBCode Estimate StdErr
  <chr>               <chr>     <dbl>  <dbl>
1 Aruba               ABW       NA     NA   
2 Andorra             ADO        1.32   0.48
3 Afghanistan         AFG       -1.29   0.34