Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 按数值索引选择data.table中的多列_R_Data.table - Fatal编程技术网

R 按数值索引选择data.table中的多列

R 按数值索引选择data.table中的多列,r,data.table,R,Data.table,如何使用其数值索引在data.table中的位置向量来选择多个列 这就是我们使用data.frame的方法: 对于data.table>=1.9.8的版本,以下各项都可以正常工作: library(data.table) dt <- data.table(a = 1, b = 2, c = 3) # select single column by index dt[, 2] # b # 1: 2 # select multiple columns by index dt[, 2:

如何使用其数值索引在data.table中的位置向量来选择多个列

这就是我们使用data.frame的方法:

对于data.table>=1.9.8的版本,以下各项都可以正常工作:

library(data.table)
dt <- data.table(a = 1, b = 2, c = 3)

# select single column by index
dt[, 2]
#    b
# 1: 2

# select multiple columns by index
dt[, 2:3]
#    b c
# 1: 2 3

# select single column by name
dt[, "a"]
#    a
# 1: 1

# select multiple columns by name
dt[, c("a", "b")]
#    a b
# 1: 1 2

对于data.table<1.9.8的版本,数字列选择需要使用with=FALSE,请参阅本答案的第页。另请参见v1.9.8,潜在破坏性更改,第3点

有点冗长,但我已经习惯了使用hidden.SD变量

b<-data.table(a=1,b=2,c=3,d=4)
b[,.SD,.SDcols=c(1:2)]
这有点麻烦,但您不会失去其他数据。我不认为表功能,因此您仍然可以使用其他重要功能,如联接表等。

如果要使用列名来选择列,只需使用。,这是列表的别名:


@汤姆,非常感谢你指出这个解决办法。 这对我很有用

我正在寻找一种方法,将一列从打印和上面的示例中排除。要排除第二列,可以执行以下操作

library(data.table)
dt <- data.table(a=1:2, b=2:3, c=3:4)
dt[,.SD,.SDcols=-2]
dt[,.SD,.SDcols=c(1,3)]

从v1.10.2开始,您还可以使用


没问题。同时比较dt[,a]和dt[,a,with=FALSE],看看它到底是一个多么有用的选项。有没有办法不用with来实现这一点?例如DT[,listb:c,因为我发现直接转换数据表中的列很方便,例如我可以执行DT[,list1/b,2*c],但这不适用于。在这种情况下,对包的更改将使with=FALSE变得不必要:@Frank-这是个好消息!感谢您提醒我。一旦该更改进入到CRAN上分发的data.table的版本中,我将编辑此答案,并在顶部宣布该更改。请-您或任何其他人ds this-一旦发生这种情况,请随时给我打电话提醒。@Valentas有趣的是,你应该问一下。没有一种与data.frame兼容的方法可以与=FALSE一起使用。但是,大约3周前,data.table的开发版本已经修改为类似于dt[,2],dt[,2:3],dt[,b]和dt[,cb,c]的调用在with data.frames中的行为与在with data.frames中的行为相同,而不必显式设置为with=FALSE。这非常棒!对于特定的提交,包括描述更改的新闻条目。在为该答案创建列列表ProgrammaticallyTanks时,这不是一个麻烦,也非常有用。我还发现dt[,!…keep_cols]和dt[,-…keep_cols]工作如预期!
library(data.table)
dt <- data.table(a = 1:2, b = 2:3, c = 3:4)
dt[ , .(b, c)] # select the columns b and c
# Result:
#    b c
# 1: 2 3
# 2: 3 4
library(data.table)
dt <- data.table(a=1:2, b=2:3, c=3:4)
dt[,.SD,.SDcols=-2]
dt[,.SD,.SDcols=c(1,3)]
dt <- data.table(a=1:2, b=2:3, c=3:4)

keep_cols = c("a", "c")

dt[, ..keep_cols]