R/R basic

열(row) 제거하기

시키테이 2022. 6. 9. 22:24
반응형

앞서 칼럼(column)제거하는 글을 올렸는데 정작 열을 제거하는 법은 올리지 않았네요. 

 

특정 열(column)만 선택 (keep) 혹은 제거(drop)하기 (tistory.com)

 

특정 열(column)만 선택 (keep) 혹은 제거(drop)하기

R에서 특정 열(칼럼)을 선택 혹은 제거하는 방법은 적어도 3~4가지는 되는 것 같습니다. 우선, 데이터프레임을 하나 만들어봅니다. a df라는 데이터프레임에 각각 number, fruit, TF라는 칼럼이 있는데,

approximation.tistory.com

칼럼을 제거하는 법은 그냥 NULL을 쓰거나 subset 함수를 이용하라고 했는데, 열(row)을 제거하는 법은 그냥 더 간단합니다. 예를 들어 아래와 같은 경우가 있다고 해보죠. stackoverflow에 나온 질문을 다시 한 번 적어보도록 하겠습니다. 

 

질문자는 위에서 1,3,5,7이라고 적힌 열만  유지하고 2,4,6이 있는 열은 제거하고 싶다고 했는데, 이 경우 가장 많이 쓰이는 방식은 다음과 같습니다. 만약 위 데이터프레임 이름이 df라고 한다면, 

 

 df <- df[-c(2, 4, 6), ]

이 명령어는 그냥 2번째, 4번째, 6번째 열을 제거한 나머지만 갖고 새로운 데이터를 만들어라 입니다 (맨 처음 A, B, C, D는 칼럼 이름이지 열이 아닙니다). 

 

그런데 이렇게 하면 일일이 열 번호를 세서 수동적으로 제거해야 주니까 좀 불편할 수 있죠. 열 번호를 잘못 세면 그것도 그거대로 문제이고.. 그래서 조건을 줘서 제거하는 방식이 있는데 %in%를 이용해서 하는 제거해보려고 합니다. 맨 처음 칼럼 이름이 id라고 한다면, 

첫번째 칼럼과 2, 4, 6이 들어간 벡터와 비교해서( %in%), 이 둘이 겹치는 것을 제외한(!)것만 뽑아서 새 데이터 프레임을 만들어라. 아래처럼 하면 됩니다. %in%는 그냥 쉽게 얘기해서 겹치면 true, 안 겹치면 false로 계산하는 함수입니다. id가 2,4,6이라는 겹치는 걸 제외한 것만 기존 데이터베이스에 놓아둬라 (!를 쓴 이유)

 

df <- df[ !(df$id %in% c(2,4,6)), ]

만약에 그런 게 아니라 특정 조건을 갖고 열을 뽑고 싶다고 하면 제일 좋은 건 subset함수를 쓰는 겁니다. 

조건을 걸어 자료 추출하기 (tistory.com)

 

조건을 걸어 자료 추출하기

데이터프레임 자료를 조건을 걸어 추출하기 위한 방법은 기본적으로 subset을 사용할 때와 그렇지 않을 때가 있습니다. mtcars subset(mtcars, subset=mpg mpg 20이하만 뽑아라입니다. 간단하죠? 다른 방식으

approximation.tistory.com

하나만 더 해볼까요? 예를 들어 c2라는 칼럼이 있는데 여기에 missing value (결측)이 있는 경우 그 열을 drop하라고 해라 하면 어떻게 하면 될까요? 역시 tidyverse에서는 간단하게 아래와 같이 하면 됩니다. drop_na라는 함수를 이용하면 됩니다. 

 

library(tidyverse)
df<-df%>%drop_na("c2")

만약에 c2, c3 열 두 개 중에 missing이 하나라도 있으면 떨어뜨려라고 하면

df<-df%>%drop_na(c("c2", "c3"))
반응형