仅选择特定的CSV列

use*_*330 3 csv r

假设我有一个带有以下标题的csv(当然也有一些真实的内容):

a1,a2,b1,a3,c1,b2
Run Code Online (Sandbox Code Playgroud)

如何只选择特定的列,比如以a?开头的列?

所以我只有以下标题

a1,a2,a3
Run Code Online (Sandbox Code Playgroud)

使用这个我可以指定一个范围,但我想要的列不是连续的:

myColumns = csv[c(1:3)]
Run Code Online (Sandbox Code Playgroud)

Señ*_*r O 9

myColumns = csv[,c("a1", "a2", "a3")]
Run Code Online (Sandbox Code Playgroud)

获取那些列.如果要选择以"a" 开头的所有列(编辑):

csv[,grep("^a", names(myColumns))]
Run Code Online (Sandbox Code Playgroud)


Ric*_*ven 5

如果要直接从csv文件中将选定列读入R而不读取整个文件,可以尝试使用此方法fread().

library(data.table)
fread(file, select = grep("^a", names(fread(file, nrow = 0L))))
Run Code Online (Sandbox Code Playgroud)

这只读取文件的第一行(标题),然后用于grep()确定以值开头的值的a位置.然后我们在列选择参数中使用该结果select来获取我们想要的列.

让我们尝试一下mtcars,只查找以开头的列d.

## write mtcars to file
write.csv(mtcars, row.names = FALSE, quote = FALSE, file = "mtcars.csv")
## now read only the columns beginning with 'd'
DT <- fread("mtcars.csv", select = grep("^d", names(fread("mtcars.csv", nrow = 0L))))
## have a look
head(DT)
#    disp drat
# 1:  160 3.90
# 2:  160 3.90
# 3:  108 3.85
# 4:  258 3.08
# 5:  360 3.15
# 6:  225 2.76
Run Code Online (Sandbox Code Playgroud)