如何使用data.table包读取存储vector类型列的CSV文件
解决方法
CSV是纯文本二维表格格式,原生不支持嵌套列表结构,你用fwrite写入时会自动将列表列的向量元素按默认分隔符|拼接为字符串存储,读入后按以下步骤转换即可恢复原结构:
方法1:直接转换读入的文本列
# 读入CSV文件 df <- data.table::fread(file = "C/MyFolder/file.csv") # 拆分var2列的字符串,转数值后存为列表列 df[, var2 := lapply(strsplit(var2, "\\|"), as.numeric)] # 如需转回tibble格式执行下面这句 df <- tibble::as_tibble(df)
转换完成后取df$var2[[1]]即可得到原向量c(1,2,3)。
如果你的向量元素本身包含|字符,可在写入时自定义拼接分隔符避免冲突:
# 写入时指定用||作为向量元素的分隔符 data.table::fwrite(df, file = "C/MyFolder/file.csv", sep2 = c("", "||", "")) # 读入时按||拆分即可 df[, var2 := lapply(strsplit(var2, "\\|\\|"), as.numeric)]
方法2:改用R原生序列化格式(更推荐)
如果只是在R环境内读写数据,不需要用CSV给其他工具使用的话,更推荐用RDS格式存储,可100%保留所有数据结构,无需额外转换:
# 存文件 saveRDS(df, "C/MyFolder/file.rds") # 读文件,直接得到原tibble结构 df <- readRDS("C/MyFolder/file.rds")
内容的提问来源于stack exchange,提问作者Jack Po
相关产品推荐
相关产品推荐

