读取format_csv的反向函数

nxagd54h  于 2023-02-27  发布在  其他
关注(0)|答案(2)|浏览(113)

我知道如果我想把data.frame保存到一个字符串而不是一个文件,我可以使用readr函数format_csv

data.frame(a=c(1,2), b=c("a", 'c')) %>% 
   format_csv(col_names=T)

其产生

[1] "a,b\n1,a\n2,c\n"

是否存在相对于format_csv的反向函数?
或者将textConnectionread.table一起使用是唯一的方法:

con<-textConnection(csv, "r")
  tb<-read.table(file=con, sep=",", header = T, stringsAsFactors = F)
  close(con)
piztneat

piztneat1#

如果不需要与问题中所示的匿名数据框完全相同的类型,可以省略col_typescolClasses参数。

csv <- "a,b\n1,a\n2,c\n" # input

# 1
library(readr)
read_csv(csv, col_types = "nc")

# 2
read.csv(text = csv, colClasses = c("numeric", "character"))

# 3
library(data.table)
fread(csv, colClasses = c("numeric", "character"))
zxlwwiss

zxlwwiss2#

我也在寻找同样的问题,并在read_delim documentation中找到了答案:
文本数据对于示例和测试是最有用的。要被识别为文本数据,输入必须用I() Package ,是一个包含至少一个新行的字符串,或者是一个包含至少一个新行的字符串的向量。
这非常有用,因为我需要预处理文件的文本字符串(更改编码、删除一堆控制字符等),这是我在使用readLines读取的原始向量上使用regex完成的:

raw_text <- readLines(mycsv)
clean_text <- raw_text |>
   iconv(from = "GB18030", to = "US-ASCII", sub = "") |>
   stringr::str_replace_all("\\035", ",") |>
   stringr::str_replace("\\v", "") |> 
   stringr::str_replace("(\\+)([^,].*)?(,)", "\\1\\3")

tbl <- read_csv(I(clean_text))

相关问题