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)
is100
和 是一个整数。为什么这样做?
解决方案
您需要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, with=FALSE] 和 x[, .SD, .SDcols=cols]。
由于c(2,1,3:100L)
是数字列,with=FALSE
因此不需要,并且列会自动返回。当它是 时c(2,1,3:ncol(df))
,这个表达式将被计算并作为一个向量返回。
应该在某处受骗
推荐阅读
- python - 循环 | 列表 | 萃取
- reactjs - 将 highcharts-custom-events 与 React 集成
- php - 如何在没有json响应的php API中发送短信?
- php - 如何在php中遍历jquery数据表中的所有记录
- ios - 在 flatMap 运算符闭包中放置打印语句后组合奇怪的编译错误
- php - Laravel Excel - 块中并排的数据
- r - 使用 Michaelis-Menten 曲线,我如何计算每个品种的临界值,以及如何测试它们是否存在显着差异?
- php - 如何让这个会话进入另一个 .php?edit id;?>
- javascript - 在一次数组迭代中按名称从数组中获取对象
- mysql - 两个虚拟列的数量差异