[r] 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

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


답변

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


답변

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

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


답변