例如,我通过以下命令将数据表文件保存为“t.csv”:
dt <- data.table(A = letters[rep(1:3, 2)],
X = 1:6,
B = letters[rep(2:4, 2)],
Y = 6:1)
fwrite(dt,"t.csv", row.name=F, quote=T)
如果没有跳过设置,我可以通过“select =”提供列名称向量,以任何顺序读取某些列。但是,如果需要跳过某些行,我不能使用列名进行选择,例如,next命令会生成错误:
dt <- fread("t.csv", skip = 1, select = "X")
# Error in ans[[1L]] : subscript out of bounds # In addition: Warning message: # In fread("t.csv", skip = 1, select = "X") : # Column name 'X' not found in column name header (case sensitive), skipping.
似乎一旦fread跳过一行,它也会丢失所有的列名,这是真的吗?无论如何,在这种情况下,我必须使用列索引来选择列。但是,这里有一些奇怪的情况:如果列索引不是升序,则结果列顺序混乱
dt <- fread("t.csv", skip = 2, select = c(3, 1, 2))
V2 V3 V1
1: 2 c b
2: 3 d c
3: 4 b a
4: 5 c b
5: 6 d c
怎么理解这个?
另一个问题是关于数据表的二级索引。一旦我setindex(dt, V3)
,我怎么能以V3的顺序显示它?
谢谢。
在select(V3,V1和V2)中使用完整的列名:
fread( "t.csv", skip = 2, select = paste0( "V", c( 3, 1, 2) ) )
# V3 V1 V2
# 1: c b 2
# 2: d c 3
# 3: b a 4
# 4: c b 5
# 5: d c 6