【发布时间】:2020-01-28 03:31:54
【问题描述】:
是否可以将列索引传递给 read_csv?
我将许多 CSV 文件传递给具有不同标题名称的 read_csv,因此我希望使用列索引而不是指定名称。
这可能吗?
df.list <- lapply(myExcelCSV, read_csv, skip = headers2skip[i]-1)
【问题讨论】:
-
我很想将“索引”编辑为“索引”,但会避免......
是否可以将列索引传递给 read_csv?
我将许多 CSV 文件传递给具有不同标题名称的 read_csv,因此我希望使用列索引而不是指定名称。
这可能吗?
df.list <- lapply(myExcelCSV, read_csv, skip = headers2skip[i]-1)
【问题讨论】:
或者,您可以使用紧凑的字符串表示 其中每个字符代表一列: c = character, i = 整数,n = 数字,d = 双精度,l = 逻辑,f = 因子,D = 日期,T = 日期时间,t = 时间,? = 猜测,或‘_’/‘-’ 跳过该列。
如果您知道文件中的 total 列数,您可以这样做:
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)
}
如果您事先不知道总列数,您可以在此函数中添加代码以仅读取文件的第一行并计算返回的列数...
FWIW skip 参数可能不会像您认为的那样做(它跳过行而不是选择/取消选择列):正如我所读 ?readr::read_csv() 似乎没有任何方便的方法来跳过和/或包括特定的列(按名称或按索引),除了上面建议的某些 ad hoc 机制;这可能值得在readr 问题列表上提出功能请求/讨论? (例如,添加可以通过名称或位置指定的 cols_include 和/或 cols_exclude 参数?)
【讨论】:
scan (what=character(), sep=[something]),因为count.fields() 似乎没有n_max 参数?或者readLines(n=1) 传递给count.fields() ?