奇怪的数据表选择列

时间:2019-03-15 09:36:06

标签: r data.table

我说了data.table的一种奇怪行为,我不理解:

library(data.table)
df <- as.data.table(matrix(ncol = 100,nrow = 3,data = sample(letters,300,replace = T)))

如果我想倒数前两列,我可以这样做:

df[,c(2,1,3:100L)]

效果很好。但是如果我这样做:

df[,c(2,1,3:ncol(df))]

  [1]   2   1   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32
 [33]  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64
 [65]  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96
 [97]  97  98  99 100

,我不理解,因为ncol(df)100并且是整数。为什么这样做呢?

1 个答案:

答案 0 :(得分:1)

您需要按以下方式使用with=FALSE

df[,c(2,1,3:ncol(df)),with=FALSE]

?data.table的参数下,从with

  

当j是列名称的字符向量时,要选择的列位置的数字向量或格式为startcol:endcol,并且返回的值始终是data.table。 with = FALSE不再需要动态选择列。请注意,x [,cols]等效于x [,..cols]和x [,cols,具有= FALSE]和x [,.SD,.SDcols = cols]。

由于c(2,1,3:100L)是数字列,因此不需要with=FALSE,并且会自动返回这些列。为c(2,1,3:ncol(df))时,该表达式将被求值并作为向量返回。

在某处应该有骗子