2015-10-23 19 views
8

Powiedzmy mam następujący data.frame i następujące data.table:Wybierz kolumny data.table oparte na logicznej wektora

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) 

dysponujący data.frame, mogę wybrać kolumny oparte na logicznym wektor następująco:

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

wynikiem jest:

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 

jednak

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

prowadzi do:

[1] TRUE TRUE FALSE 

Jak można to zrobić?

Odpowiedz

9

Musimy with=FALSE

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

Na podstawie dokumentacji w ?data.table

domyślnie w j = TRUE i jest oceniana w ramach X; kolumny można używać jako zmiennych. Gdy z = FALSE j jest znakiem wektorów nazw kolumn lub wektorów liczbowych pozycji kolumn do select, a zwróconą wartością zawsze jest data.table. with = FAŁSZ to często przydatne w data.table do dynamicznego wybierania kolumn.

+1

Ahh Rozumiem, dziękuję za cytowanie wyjaśnień z dokumentu. – EDC

+0

@EDC Bez problemu. Cieszę się, że ci pomogę .. – akrun

+0

Przepraszam, tylko trochę q na ten temat: jeśli chcę ustawić te kolumny na pewną wartość, np. 'NA', jaki jest najlepszy sposób na zrobienie tego? Czy powinienem zrobić nowy q? – user3032689

Powiązane problemy