指定应用 read_csv 的列数

The*_*oat 4 r lapply dplyr

是否可以将列索引传递给 read_csv?

我将许多 CSV 文件传递​​给具有不同标题名称的 read_csv,而不是指定我希望使用列索引的名称。

这可能吗?

df.list <- lapply(myExcelCSV, read_csv, skip = headers2skip[i]-1)
Run Code Online (Sandbox Code Playgroud)

Ben*_*ker 6

或者,您可以使用紧凑的字符串表示形式,其中每个字符代表一列:c = 字符,i = 整数,n = 数字,d = 双精度,l = 逻辑,f = 因子,D = 日期,T = 日期时间,t = 时间,?= 猜测,或 '_'/'-' 跳过该列。

如果您知道文件中的列数,您可以这样做:

my_read <- function(..., tot_cols, skip_cols=numeric(0)) {
   csr <- rep("?",tot_cols)
   csr[skip_cols]  <- "_"
   csr <- paste(csr,collapse="")
   read_csv(...,col_types=csr)
}
Run Code Online (Sandbox Code Playgroud)

如果您事先不知道总列数,您可以向此函数添加代码以仅读取文件的第一行并计算返回的列数...

FWIWskip参数可能不会做你认为它做的事情(它跳过行而不是选择/取消选择列):正如我读到的?readr::read_csv()那样,似乎没有任何方便的方法来跳过和/或包含特定的列(按名称或按索引) ) 除非通过某些特殊机制,例如上面建议的;这可能值得在readr问题列表上进行功能请求/讨论?(例如添加cols_include和/或cols_exclude可以通过名称或位置指定的参数?)

  • 可能需要“scan (what=character(), sep=[something])”,因为“count.fields()”似乎没有“n_max”参数?或者将“readLines(n=1)”传递给“count.fields()”? (2认同)