r - 在 R 中读取包含向量 (c(x,y)) 的 .csv
问题描述
我有点苦恼。我有一堆(数千个).csv 文件,其中几行包含一个数字向量,而不是一个值,我需要将其读入一个 tibble 或数据框中,并将该向量作为字符以进行进一步处理。例如:
"col1","col2","col3"
"a",1,integer(0)
"c",c(3,4),5
"e",6,7
最终应该是
col1 col2 col3
<chr> <chr> <chr>
1 a 1 integer(0)
2 c c(3,4) 5
3 e 7 7
该向量仅在“col2”中并且包含整数。该向量通常包含 2 个条目,但可能更多。实际上,中间有两列可以包含多个条目,但我知道两者的位置。
我不知道如何成功地将这些读到 R 中。read.csv 或 read_csv 似乎无法处理它们。有没有一种方法可以在用逗号分隔之前逐行读取文件(幸好它们不长)和 eval() 行?在读取 bash 中的文件之前,我曾考虑用 bash 中的 和 with 替换c(
("c(
并且)
必须)"
这样做到integer(
.
或者,我曾考虑将 bash 中的 .csvs 拆分为包含“正常”行的行和包含向量(grep c(
)的行,但我不确定如何嵌套 2:length(-1) 的列回到向量中。
但是,我绝对更喜欢在 R 中独立的方法。任何想法都值得赞赏!
解决方案
我将您的示例输入到一个 csv 文件中,然后使用 read.csv 将其输入并指定第 2 列是字符。使用 gsub 我替换了字母 c 和左括号和右括号。然后我遍历第 2 列以查找出现逗号的情况并将这些实例转换为整数列表。
data <- read.csv("SO question.csv", colClasses = c("character","character","integer"))
data$col2 <- gsub("(c|\\(|\\))","",data$col2)
for (i in 1:nrow(data)) {
if (grepl(",", data$col2[i]) == TRUE) {
temp <- unlist(strsplit(data$col2[i],","))
data$col2[i] <- list(as.integer(temp))
}
}
data
推荐阅读
- r - R中不一致的函数分离
- javascript - pdfkit表格中的对齐问题?
- angular - 从 paramMap 获取参数的问题
- python - Python:绘制具有x值之间实际距离的折线图
- azure-pipelines - Azure 管道的 CefSharp 构建错误:无法加载文件或程序集“CefSharp.Core.dll”
- java - MockMvc 抛出内部异常而不是返回带有 4xx 状态码的响应
- android - .gradle:gitlab CI 中的目录不为空
- python - 如何从模板生成数据结构?
- python-3.x - 如何使用 django 模型将图像存储在数据库中
- reactjs - 为什么单击我的模态时,模型消失了