2015-10-23 1 views
8

Допустим, у меня есть следующий data.frame и следующие data.table:Выбрать столбцы в data.table на основе логического вектора

DF = data.frame(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9) 
DT = data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9) 

С в data.frame, я могу выбрать столбцы на основе логической вектор следующим образом:

DF[,c(TRUE,TRUE,FALSE)] 

в результате:

x y 
1 a 1 
2 a 3 
3 a 6 
4 b 1 
5 b 3 
6 b 6 
7 c 1 
8 c 3 
9 c 6 

Однако

DT[,c(TRUE,TRUE,FALSE)] 

приводит к:

[1] TRUE TRUE FALSE 

Как это можно сделать?

ответ

9

Нам нужно with=FALSE

DT[, c(TRUE, TRUE, FALSE), with=FALSE] 

На основе документации в ?data.table

По умолчанию с = TRUE и J оценивается в рамках х; столбцы имена могут использоваться как переменные. Когда with = FALSE j является символом вектор имен столбцов или числовой вектор столбцов в позиции , а возвращаемое значение всегда является таблицей данных. с = FALSE часто полезно в data.table для динамического выбора столбцов.

+1

Ahh Я вижу, спасибо за цитирование объяснения из документа. – EDC

+0

@EDC проблем нет. Рад помочь вам .. – akrun

+0

Извините, немного немного на этом: если я хочу установить эти столбцы на некоторое значение, например. 'NA', что это лучший способ сделать это? Или я должен сделать новый q? – user3032689