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 )
그리고 그것을 제거하기 위해.b
그리고.d
할 수 있는 열
Data <- subset( Data, select = -c(d, b ) )
다음 사이의 모든 열을 제거할 수 있습니다.d
그리고.b
포함:
Data <- subset( Data, select = -c( d : b )
위에서 말했듯이, 이 구문은 열 이름이 알려진 경우에만 작동합니다.열 이름이 프로그래밍 방식으로 결정된 경우(즉, 변수에 할당된 경우)에는 작동하지 않습니다.이 경고를 복사합니다.?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.frame
그러나 이러한 작업은 메모리 관점에서 볼 때 상당히 비효율적일 수 있습니다.데이터가 큰 경우 열을 제거하는 데 비정상적으로 오랜 시간이 걸리거나 다음과 같은 이유로 실패할 수 있습니다.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
저장 어토스.variable
하나의 것로으른으로.variable
.
df = subset(data, select = -c(genome) )
dplyR을 사용하면 다음과 같이 작동합니다.
data <- select(data, -genome)
여기 https://www.marsja.se/how-to-remove-a-column-in-r-using-dplyr-by-name-and-index/ #:~:text=select(스타워즈%2C%20%2D 높이)에 있는 설명서에 따라
저는 아직 언급되지 않은 것에 하나를 추가하려고 생각했습니다.간단하지만 흥미로운 것은 제가 인터넷을 숙독하는 동안 많은 곳에서 관련성이 높은 %in%가 표시됨에도 불구하고 보지 못했기 때문입니다.
df <- df[ , -which(names(df) == 'removeCol')]
또한, 저는 grep 대안을 게시하는 사람을 보지 못했습니다.패턴과 일치하는 여러 열을 제거하는 데 매우 유용합니다.
언급URL : https://stackoverflow.com/questions/6286313/remove-an-entire-column-from-a-data-frame-in-r
'programing' 카테고리의 다른 글
중첩된 객체 값별 MongoDB 정렬 (0) | 2023.06.25 |
---|---|
SQL Server 기본 문자 인코딩 (0) | 2023.06.25 |
TypeScript에서 일반 JavaScript 개체 유형을 대상으로 하는 방법이 있습니까? (0) | 2023.06.25 |
스프링 부트 응용 프로그램에서 인터셉트의 실행 순서를 정의하는 방법은 무엇입니까? (0) | 2023.06.25 |
얕은 깃 서브모듈을 만드는 방법은? (0) | 2023.06.25 |