Usuń całą kolumnę z danych.ramka w R
Czy ktoś wie jak usunąć całą kolumnę z danych.ramka w R? Na przykład, jeśli otrzymam te dane.frame:
> 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ę.
5 answers
Można ustawić na NULL
.
> Data$genome <- NULL
> head(Data)
chr region
1 chr1 CDS
2 chr1 exon
3 chr1 CDS
4 chr1 exon
5 chr1 CDS
6 chr1 exon
Jak zaznaczono w komentarzach, oto kilka innych możliwości:
Data[2] <- NULL # Wojciech Sobala
Data[[2]] <- NULL # same as above
Data <- Data[,-2] # Ian Fellows
Data <- Data[-2] # same as above
Możesz usunąć wiele kolumn poprzez:
Data[1:2] <- list(NULL) # Marek
Data[1:2] <- NULL # does not work!
Bądź ostrożny z podzbiorem macierzy, ponieważ możesz skończyć z wektorem:
Data <- Data[,-(2:3)] # vector
Data <- Data[,-(2:3),drop=FALSE] # still a data.frame
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
2013-09-18 11:04:22
Aby usunąć jedną lub więcej kolumn po nazwie, gdy nazwy kolumn są znane( w przeciwieństwie do określania w czasie wykonywania), podoba mi się składnia subset()
. Np. dla ramki danych
df <- data.frame(a=1:3, d=2:4, c=3:5, b=4:6)
Aby usunąć tylko a
kolumnę można zrobić
Data <- subset( Data, select = -a )
I aby usunąć kolumny b
i d
można zrobić
Data <- subset( Data, select = -c(d, b ) )
Możesz usunąć wszystkie kolumny pomiędzy d
i b
za pomocą:
Data <- subset( Data, select = -c( d : b )
Jak powiedziałem powyżej, składnia ta działa tylko wtedy, gdy nazwy kolumn są znane. To nie zadziała. kiedy powiedzmy nazwy kolumn są ustalane programowo (tzn. przypisywane do zmiennej). Powtórzę to Ostrzeżenie z ?subset
dokumentacji:
Ostrzeżenie:
Jest to Funkcja wygodna przeznaczona do interaktywnego użytku. Do programowania lepiej jest użyć standardowego podzbioru funkcje takie jak " [ " , a w szczególności niestandardowa ocena argument "podzbiór" może mieć nieprzewidziane konsekwencje.
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
2012-07-19 16:33:47
Zamieszczone odpowiedzi są bardzo dobre podczas pracy z data.frame
S. jednak te zadania mogą być dość nieefektywne z perspektywy pamięci. W przypadku dużych danych usunięcie kolumny może zająć niezwykle dużo czasu i / lub nie powiedzie się z powodu błędów out of memory
. Pakiet data.table
pomaga rozwiązać ten problem za pomocą operatora :=
:
library(data.table)
> dt <- data.table(a = 1, b = 1, c = 1)
> dt[,a:=NULL]
b c
[1,] 1 1
Powinienem złożyć większy przykład, aby pokazać różnice. Będę aktualizować tę odpowiedź w pewnym momencie z tym.
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
2012-07-19 16:40:42
(dla kompletności) jeśli chcesz usunąć kolumny według nazwy, możesz to zrobić:
cols.dont.want <- "genome"
cols.dont.want <- c("genome", "region") # if you want to remove multiple columns
data <- data[, ! names(data) %in% cols.dont.want, drop = F]
W Tym drop = F
zapewnia, że wynik będzie nadal data.frame
, nawet jeśli pozostanie tylko jedna kolumna.
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
2017-02-01 08:36:21
Dzięki temu możesz usunąć column
i przechowywać variable
w innym variable
.
df = subset(data, select = -c(genome) )
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
2017-08-04 05:38:07