development

R의 data.frame에서 전체 열을 제거하십시오.

big-blog 2020. 4. 6. 08:08
반응형

R의 data.frame에서 전체 열을 제거하십시오.


누구나 R의 data.frame에서 전체 열을 제거하는 방법을 알고 있습니까? 예를 들어이 data.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

두 번째 열을 제거하고 싶습니다.


로 설정할 수 있습니다 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

의견에서 지적했듯이 다른 가능성은 다음과 같습니다.

Data[2] <- NULL    # Wojciech Sobala
Data[[2]] <- NULL  # same as above
Data <- Data[,-2]  # Ian Fellows
Data <- Data[-2]   # same as above

다음을 통해 여러 열을 제거 할 수 있습니다.

Data[1:2] <- list(NULL)  # Marek
Data[1:2] <- NULL        # does not work!

벡터로 끝날 수 있으므로 행렬 서브셋에주의하십시오.

Data <- Data[,-(2:3)]             # vector
Data <- Data[,-(2:3),drop=FALSE]  # still a data.frame

이름으로 하나 이상의 열을 제거하려면 열 이름을 알 때 (런타임에서 결정되는 것이 아니라) subset()구문이 좋습니다. 예를 들어 데이터 프레임

df <- data.frame(a=1:3, d=2:4, c=3:5, b=4:6)

a할 수 있는 열만 제거하십시오.

Data <- subset( Data, select = -a )

할 수 있는 bd을 제거하기 위해

Data <- subset( Data, select = -c(d, b ) )

당신은 사이의 모든 열을 제거 할 수 있습니다 db함께 :

Data <- subset( Data, select = -c( d : b )

위에서 말했듯이이 구문은 열 이름이 알려진 경우에만 작동합니다. 열 이름이 프로그래밍 방식으로 결정된 경우 (즉, 변수에 할당 된 경우) 작동하지 않습니다. ?subset설명서 에서이 경고를 재현하겠습니다 .

경고:

대화식으로 사용하기위한 편리한 기능입니다. 프로그래밍에는 '['와 같은 표준 하위 설정 기능을 사용하는 것이 좋으며, 특히 'subset'인수의 비표준 평가는 예상치 못한 결과를 초래할 수 있습니다.


(완전성을 위해) 이름별로 열을 제거하려면 다음을 수행하십시오.

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]

포함 drop = F하면 data.frame열이 하나만 남아 있어도 결과가 여전히 균일합니다.


게시 된 답변은 data.frames로 작업 할 때 매우 좋습니다 . 그러나 이러한 작업은 메모리 측면에서 비효율적 일 수 있습니다. 큰 데이터의 경우 열을 제거하는 데 시간이 오래 걸리거나 오류로 인해 실패 할 수 out of memory있습니다. 패키지 data.table:=연산자 로이 문제를 해결하는 데 도움이됩니다 .

library(data.table)
> dt <- data.table(a = 1, b = 1, c = 1)
> dt[,a:=NULL]
     b c
[1,] 1 1

차이점을 보여주기 위해 더 큰 예를 모아야합니다. 나는이 답변을 어느 시점에서 업데이트 할 것입니다.


이것으로를 제거하고 다른에 column저장할 수 있습니다 .variablevariable

df = subset(data, select = -c(genome) )

dplyr::select()일부 도우미 기능이있는 하나 이상의 열을 제거하기위한 몇 가지 옵션이 있습니다 . 헬퍼 함수는 일부 특정 열의 이름을 지울 필요가 없기 때문에 유용 할 수 있습니다. 열을 사용하여 삭제 하려면 행 이름을 무효화 select()하기 위해 행간 -사용해야 합니다.

dplyr::starwars다양한 컬럼 이름에 대한 샘플 데이터 사용 :

library(dplyr)

starwars %>% 
  select(-height) %>%                  # a specific column name
  select(-one_of('mass', 'films')) %>% # any columns named in one_of()
  select(-(name:hair_color)) %>%       # the range of columns from 'name' to 'hair_color'
  select(-contains('color')) %>%       # any column name that contains 'color'
  select(-starts_with('bi')) %>%       # any column name that starts with 'bi'
  select(-ends_with('er')) %>%         # any column name that ends with 'er'
  select(-matches('^v.+s$')) %>%       # any column name matching the regex pattern
  select_if(~!is.list(.)) %>%          # not by column name but by data type
  head(2)

# A tibble: 2 x 2
homeworld species
  <chr>     <chr>  
1 Tatooine  Human  
2 Tatooine  Droid 

열 번호로 삭제할 수도 있습니다.

starwars %>% 
  select(-2, -(4:10)) # column 2 and columns 4 through 10

참고 URL : https://stackoverflow.com/questions/6286313/remove-an-entire-column-from-a-data-frame-in-r

반응형