R

[R] 행 추출 및 열 추출 방법 정리(특정 위치, 특정 조건)

jimmy_AI 2022. 9. 5. 22:08
반응형

R의 데이터프레임, tibble 등의 자료형에서 원하는 위치 혹은 조건을 만족하는 행 / 열만을

가져오는 방법들을 총정리해보도록 하겠습니다.

 

우선, 아래와 같은 데이터가 df라는 변수에 저장되어 있다고 가정해보고

해당 데이터에서 행 및 열 추출을 여러 가지 방법으로 진행해보도록 하겠습니다.

참고 : 아래 설명에 df로 등장하는 부분들에 데이터가 저장된 변수 이름을 대입하시면 됩니다.

 

 

R 위치 기준 행 / 열 추출

행 1개 가져오기

df[위치 번호, ] 형태(쉼표 필수)로 해당 위치의 행 1개만을 추출해낼 수 있습니다.

첫 번째 행을 가져오는 예시 코드 및 결과는 다음과 같습니다.

> df[1,]
# A tibble: 1 × 4
  이름   국어  수학  영어
  <chr> <dbl> <dbl> <dbl>
1 AAA      80    90   100

 

행 여러 개 가져오기

여러 개의 행들을 동시에 뽑아오고 싶다면 df[위치 인덱스 벡터, ] 형태(마찬가지로 콤마 필수)

로 지정하여 원하는 위치의 행들만을 골라서 추출해낼 수 있습니다.

> df[c(1, 3), ] # 1번째와 3번째 행 추출
# A tibble: 2 × 4
  이름   국어  수학  영어
  <chr> <dbl> <dbl> <dbl>
1 AAA      80    90   100
2 CCC      95    80    80

> df[c(1:3), ] # 1~3번째 행 추출
# A tibble: 3 × 4
  이름   국어  수학  영어
  <chr> <dbl> <dbl> <dbl>
1 AAA      80    90   100
2 BBB      90    75    85
3 CCC      95    80    80

 

컬럼 1개 가져오기

열 이름 기준 추출 방법과 위치가 몇 번째 인지를 기준으로 가져오는 방법 모두 가능합니다.

 

먼저, 컬럼명을 기준으로 가져오는 방법은 df[열 이름] 형태로 지정해주시면 완료됩니다.

> df["국어"]
# A tibble: 4 × 1
   국어
  <dbl>
1    80
2    90
3    95
4    85

 

반면, 컬럼 위치 기준으로 추출하려면 df[열 위치 번호] 형태로 코드를 작성하시면 됩니다.

(행 추출에서 쉼표가 없는 형태와 동일합니다.)

> df[3] # 순서상으로 3번째인 수학 열 추출
# A tibble: 4 × 1
   수학
  <dbl>
1    90
2    75
3    80
4    95

 

컬럼 여러 개 가져오기

여기서도 마찬가지로 이름 기준, 위치 기준 추출이 모두 가능한데, 

df[열 이름 벡터 or 열 위치 인덱스 벡터] 형태로 코드를 작성해주시면 됩니다.

> df[c("이름", "국어")]
# A tibble: 4 × 2
  이름   국어
  <chr> <dbl>
1 AAA      80
2 BBB      90
3 CCC      95
4 DDD      85

> df[c(2:4)]
# A tibble: 4 × 3
   국어  수학  영어
  <dbl> <dbl> <dbl>
1    80    90   100
2    90    75    85
3    95    80    80
4    85    95    90

 

반응형

 

행 / 열 위치 동시 지정 추출

행 추출과 열 추출 방법을 조합하여 동시에 위치를 지정하여 추출하는 것도 가능합니다.

df[행 위치 조건, 열 위치 조건] 순서의 형태로 콤마를 기준으로 행 / 열 위치에 대한 정보를

구분해주시면 두 가지 위치를 모두 고려한 추출이 가능합니다.

> df[c(1, 2, 4), c(1, 4)] # 1, 2, 4번째 행들의 1, 4번째 열 추출
# A tibble: 3 × 2
  이름   영어
  <chr> <dbl>
1 AAA     100
2 BBB      85
3 DDD      90

> df[c(2:4), c("이름", "수학")] # 2~4번째 행들의 이름, 수학 열 추출
# A tibble: 3 × 2
  이름   수학
  <chr> <dbl>
1 BBB      75
2 CCC      80
3 DDD      95

 

 

R 조건 기준 행 / 열 추출

조건이 1개인 경우

특정 열의 값이 주어진 조건을 만족하는 행들만 추출하고 싶은 경우

df[조건, ] 형태(쉼표 필수)로 작성해주시면 됩니다.

 

이름이 AAA인 열과 수학이 80 초과인 열을 각각 추출하는 예시는 아래와 같습니다.

> df[df$"이름" == "AAA", ]
# A tibble: 1 × 4
  이름   국어  수학  영어
  <chr> <dbl> <dbl> <dbl>
1 AAA      80    90   100

> df[df$"수학" > 80, ]
# A tibble: 2 × 4
  이름   국어  수학  영어
  <chr> <dbl> <dbl> <dbl>
1 AAA      80    90   100
2 DDD      85    95    90

 

콤마 뒤에 열 위치/이름 조건을 같이 제시하여 행과 열에 대한 동시 필터링도 가능합니다.

수학 80 초과인 행들 중 이름과 수학 컬럼들만 가져오는 예시는 다음과 같습니다.

> df[df$"수학" > 80, c("이름", "수학")]
# A tibble: 2 × 2
  이름   수학
  <chr> <dbl>
1 AAA      90
2 DDD      95

 

조건이 여러 개인 경우

만족시키려는 조건이 두 개 이상인 경우에는 모두 만족해야하는 and 조건일 때는 &로,

이들 중 하나만 만족해도 되는 or 조건일 때는 |(엔터 키 상단에 위치)로 조건들을

구분해주시면 됩니다.

 

이 외의 사용법은 조건이 1개인 경우와 동일합니다. 복합 조건 필터링 예시는 다음과 같습니다.

# 수학과 영어 모두 90 이상인 행들 추출
> df[df$"수학" >= 90 & df$영어 >= 90, ]
# A tibble: 2 × 4
  이름   국어  수학  영어
  <chr> <dbl> <dbl> <dbl>
1 AAA      80    90   100
2 DDD      85    95    90

# 수학과 영어 모두 90 이상인 행들의 이름 열 추출
> df[df$"수학" >= 90 & df$영어 >= 90, "이름"]
# A tibble: 2 × 1
  이름 
  <chr>
1 AAA  
2 DDD

# 영어가 100이거나 국어가 90 초과인 행들 추출
> df[df$영어 == 100 | df$국어 > 90, ]
# A tibble: 2 × 4
  이름   국어  수학  영어
  <chr> <dbl> <dbl> <dbl>
1 AAA      80    90   100
2 CCC      95    80    80

# 위 조건에서 국어, 영어 열만 추출
> df[df$영어 == 100 | df$국어 > 90, c("국어", "영어")]
# A tibble: 2 × 2
   국어  영어
  <dbl> <dbl>
1    80   100
2    95    80