我有一个没有标题行的大型CSV文件,标题对我来说是一个向量.我希望在不加载整个文件的情况下使用文件列的子集.所需列的子集以单独列表的形式提供.

Edit: in this case, the column names provided in the header list are important. This MRE only has 4 column names, but the solution should work for a large dataset with pre-specified column names. The catch is that the column names are only provided externally, not as a header in the CSV file.

1,2,3,4
5,6,7,8
9,10,11,12
header <- c("A", "B", "C", "D")
subset <- c("D", "B")

到目前为止,我一直在以以下方式读取数据,这将获得我想要的结果,但首先加载整个文件.

# Setup

library(readr)

write.table(
  structure(list(V1 = c(1L, 5L, 9L), V2 = c(2L, 6L, 10L), V3 = c(3L, 7L, 11L), V4 = c(4L, 8L, 12L)), class = "data.frame", row.names = c(NA, -3L)),
  file="sample-data.csv",
  row.names=FALSE,
  col.names=FALSE,
  sep=","
)

header <- c("A", "B", "C", "D")
subset <- c("D", "B")

# Current approach

df1 <- read_csv(
  "sample-data.csv",
  col_names = header
)[subset]

df1
# A tibble: 3 × 2
      D     B
  <dbl> <dbl>
1     4     2
2     8     6
3    12    10

如何才能在不先加载整个文件的情况下获得相同的结果?

相关问题

推荐答案

你可以使用readr::read_csvcol_namescol_select参数.

header <- c("A", "B", "C", "D")
subset <- c("D", "B")

readr::read_csv("sample_data.csv",
                col_names = header,
                col_select = any_of(subset))

# # A tibble: 3 × 2
#       D     B
#   <dbl> <dbl>
# 1     4     2
# 2     8     6
# 3    12    10

R相关问答推荐

混淆矩阵,其中每列和等于1

手动打印线型gplot

ggplot的轴标签保存在officer中时被剪切

在R中为马赛克图中的每个字段着色

使用geom_segment()对y轴排序

在另存为PNG之前隐藏htmlwidget绘图元素

为什么我的基准测试会随着样本量的增加而出现一些波动?

R中1到n_1,2到n_2,…,n到n_n的所有组合都是列表中的向量?

用两种 colored颜色 填充方框图

将多个列值转换为二进制

正在导出默认的RStudio主题,还是设置括号 colored颜色 ?

R中Gamma回归模型均方误差的两种计算方法不一致

优化从每个面的栅格中提取值

在ggplot2上从多个数据框创建复杂的自定义图形

网络抓取新闻标题和时间

如何在内联代码中添加额外的空格(R Markdown)

禁用时,SelecizeInput将变得不透明

roxygen2正在处理太多的文件

conditionPanel不考虑以下条件

使用另一列中的增长率外推R(使用dplyr)