Czy ktoś wie, jak usunąć całą kolumnę z data.frame w R? Na przykład, jeśli otrzymam te dane. Ramka:
> head(data)
chr genome region
1 chr1 hg19_refGene CDS
2 chr1 hg19_refGene exon
3 chr1 hg19_refGene CDS
4 chr1 hg19_refGene exon
5 chr1 hg19_refGene CDS
6 chr1 hg19_refGene exon
i chcę usunąć drugą kolumnę.
Odpowiedzi:
Możesz to ustawić
NULL
.Jak wskazano w komentarzach, oto kilka innych możliwości:
Możesz usunąć wiele kolumn za pomocą:
Uważaj jednak na podzestawy macierzy, ponieważ możesz skończyć z wektorem:
źródło
Data[-2]
nie potrzebujądrop
argumentów, bo to zawsze powrócićdata.frame
zdata.frame
. I myślę, że jest to znacznie lepszy sposób na zlokalizowanie kolumn (i tylko kolumn) wdata.frame
(i to szybciej). Sprawdzić:cars[-1]
(jedna kolumnadata.frame
) lub lepiejcars[-(1:2)]
:data frame with 0 columns and 50 rows
.Data[c(1,2)]<-list(NULL)
jest potrzebna.Aby usunąć jedną lub więcej kolumn według nazwy, gdy nazwy kolumn są znane (w przeciwieństwie do określania w czasie wykonywania), podoba mi się
subset()
składnia. Np. Dla ramki danychaby usunąć tylko
a
kolumnę, którą możesz zrobići aby usunąć kolumny
b
i,d
które możesz zrobićMożesz usunąć wszystkie kolumny pomiędzy
d
i zab
pomocą:Jak powiedziałem powyżej, ta składnia działa tylko wtedy, gdy znane są nazwy kolumn. Nie zadziała, gdy powiedzmy, że nazwy kolumn są ustalane programowo (tj. Przypisywane do zmiennej). Powielę to Ostrzeżenie z
?subset
dokumentacji:źródło
(Dla kompletności) Jeśli chcesz usunąć kolumny według nazwy, możesz to zrobić:
Dołączenie
drop = F
gwarantuje, że wynik będzie nadaldata.frame
parzysty, nawet jeśli pozostanie tylko jedna kolumna.źródło
Opublikowane odpowiedzi są bardzo dobre podczas pracy z
data.frame
s. Jednak zadania te mogą być dość nieefektywne z punktu widzenia pamięci. W przypadku dużych danych usunięcie kolumny może zająć niezwykle dużo czasu i / lub zakończyć się niepowodzeniem z powoduout of memory
błędów. Pakietdata.table
pomaga rozwiązać ten problem z:=
operatorem:Powinienem zebrać większy przykład, aby pokazać różnice. W pewnym momencie zaktualizuję tę odpowiedź.
źródło
data.table::set
funkcji można użyć wdata.frame
celu natychmiastowego usunięcia lub modyfikacji kolumny, bez wykonywania kopii. Zobacz tutajIstnieje kilka opcji usuwania jednej lub więcej kolumn za pomocą
dplyr::select()
niektórych funkcji pomocniczych. Funkcje pomocnicze mogą być przydatne, ponieważ niektóre nie wymagają nazywania wszystkich konkretnych kolumn, które mają zostać usunięte. Pamiętaj, że aby upuścić kolumny za pomocąselect()
, musisz użyć-
znaku wiodącego, aby zanegować nazwy kolumn.Używanie
dplyr::starwars
przykładowych danych dla niektórych odmian nazw kolumn:Możesz także upuścić według numeru kolumny:
źródło
Dzięki temu możesz usunąć
column
i zapisaćvariable
w innymvariable
.źródło