跳过和选择选项都会导致奇怪的结果

问题描述 投票:0回答:1

例如,我通过以下命令将数据表文件保存为“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的顺序显示它?

谢谢。

r data.table
1个回答
0
投票

在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
© www.soinside.com 2019 - 2024. All rights reserved.