Wyodrębnij kolumnę z danych.tabela jako wektor, według pozycji

Jak wyodrębnić kolumnę z danych.tabela jako wektor według jego położenia? Poniżej kilka fragmentów kodu, które wypróbowałem:

DT<-data.table(x=c(1,2),y=c(3,4),z=c(5,6))
DT
#   x y z
#1: 1 3 5
#2: 2 4 6

Chcę uzyskać to wyjście używając pozycji kolumny

DT$y 
#[1] 3 4
is.vector(DT$y)
#[1] TRUE

Inny sposób uzyskania tego wyniku za pomocą pozycji kolumny

DT[,y] 
#[1] 3 4
is.vector(DT[,y])
#[1] TRUE

To nie daje wektora

DT[,2,with=FALSE]
#   y
#1: 3
#2: 4
is.vector(DT[,2,with=FALSE])
#[1] FALSE

Te dwa nie działają:

DT$noquote(names(DT)[2]) # Doesn't work
#Error: attempt to apply non-function

DT[,noquote(names(DT)[2])] # Doesn't work
#[1] y

A to nie daje wektora:

DT[,noquote(names(DT)[2]),with=FALSE] # Not a vector
#   y
#1: 3
#2: 4
is.vector(DT[,noquote(names(DT)[2]),with=FALSE])
#[1] FALSE
Author: demongolem, 2013-11-18

2 answers

DANE.tabela dziedziczy z klasy data.frame. Dlatego jest list (wektorów kolumnowych) wewnętrznie i może być traktowany jako taki.

is.list(DT)
#[1] TRUE

Na szczęście podzbiór listy, tj. [[, jest bardzo szybki i w przeciwieństwie do [, danych pakietu.tabela nie definiuje dla niej metody. Tak więc, możesz po prostu użyć [[, Aby wyodrębnić indeks:

DT[[2]]
#[1] 3 4
 78
Author: Roland,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-01 06:46:51

DT[,get(names(DT)[colNb])]

Gdzie colNb może być liczbą całkowitą (żądany numer kolumny) lub zmienną zawierającą numer kolumny.

 3
Author: lokxs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-17 14:02:56