我想读取一个csv,其中一列包含引号,而引号内的字符串包含逗号。
CSV标头:
id,名称,促销,类别,价格,单价
CSV示例行:
142251,图里,“男子√∫,林皮扎,林皮亚多雷斯,皮索斯,库拉多雷斯”,$ 73.65,$ 81.83 x Lt
我想要一个这样的dataFrame:
id = 142251
name = TULI
promo =
categories =Men√∫,Limpieza,Limpiadores,Pisos,Curadores
价格= $ 73.65
unit_price = $ 81.83 x Lt
我尝试做数据<-read.csv(file =“ data.csv”,sep =“,”,quote =“”)
但是我收到“ read.table中的错误(文件=文件,标头=标头,sep = sep,引用=引号,:列数多于列名)。
我知道解决方案将非常简单,但是我找不到解决方案。预先感谢。
答案 0 :(得分:1)
您还可以使用readr
中的tidyverse
来轻松读取csv:
library(readr)
txt <- 'id,name,promo,categories,price,unit_price
142251, TULI,,"Men√∫,Limpieza,Limpiadores,Pisos,Curadores",$ 73.65,$81.83 x Lt'
df <- read_csv(txt)
df
#> # A tibble: 1 x 6
#> id name promo categories price unit_price
#> <dbl> <chr> <lgl> <chr> <chr> <chr>
#> 1 142251 TULI NA Men√∫,Limpieza,Limpiadores,Pisos,Curado… $ 73.65 $81.83 x …
# Bonus
library(dplyr)
library(tidyr)
df2 <- df %>%
mutate(categories = strsplit(categories, ","))
df2
#> # A tibble: 1 x 6
#> id name promo categories price unit_price
#> <dbl> <chr> <lgl> <list> <chr> <chr>
#> 1 142251 TULI NA <chr [5]> $ 73.65 $81.83 x Lt
df2 %>% unnest(categories)
#> # A tibble: 5 x 6
#> id name promo categories price unit_price
#> <dbl> <chr> <lgl> <chr> <chr> <chr>
#> 1 142251 TULI NA Men√∫ $ 73.65 $81.83 x Lt
#> 2 142251 TULI NA Limpieza $ 73.65 $81.83 x Lt
#> 3 142251 TULI NA Limpiadores $ 73.65 $81.83 x Lt
#> 4 142251 TULI NA Pisos $ 73.65 $81.83 x Lt
#> 5 142251 TULI NA Curadores $ 73.65 $81.83 x Lt
由reprex package(v0.3.0)于2019-11-29创建
当然您也可以使用df <- read_csv("data.csv")
!
答案 1 :(得分:0)
数据<-read.csv(file =“ data.csv”,sep =“,”,quote =“ \”“)
应该可以,如果您查看帮助文件,则要完全禁用引用,请使用quote =“”。您需要在引号前面加上转义\。