R에서 tidyverse 패키지를 사용하여 두 데이터 프레임의 동일한 이름의 열을 기준으로 필터링 및 변형하기
R에서 tidyverse 패키지를 사용하여 두 데이터 프레임의 동일한 이름의 열을 기준으로 필터링 및 변형하기
요약
사용 예시
다음은 두 데이터 프레임 df1
과 df2
가 있다고 가정합니다.
df1 <- data.frame(id = c(1, 2, 3), name = c("Alice", "Bob", "Carol"), age = c(20, 21, 22))
df2 <- data.frame(id = c(1, 2, 3), gender = c("Female", "Male", "Female"))
mutate() 함수를 사용하여 동일한 이름의 열을 기준으로 새로운 열 만들기
mutate()
함수를 사용하여 두 데이터 프레임의 동일한 이름의 열을 기준으로 새로운 열을 만들 수 있습니다. 다음 코드는 df1
과 df2
의 id
열을 기준으로 df1
에 gender
열을 추가합니다.
library(tidyverse)
df1 <- df1 %>%
mutate(gender = df2$gender[match(id, df2$id)])
print(df1)
#> # A tibble: 3 × 4
#> id name age gender
#> <dbl> <chr> <dbl> <chr>
#> 1 1 Alice 20 Female
#> 2 2 Bob 21 Male
#> 3 3 Carol 22 Female
filter() 함수를 사용하여 동일한 이름의 열을 기준으로 데이터 프레임 필터링
df_filtered <- df1 %>%
filter(gender == "Female")
print(df_filtered)
#> # A tibble: 2 × 4
#> id name age gender
#> <dbl> <chr> <dbl> <chr>
#> 1 1 Alice 20 Female
#> 2 3 Carol 22 Female
조건에 따라 동일한 이름의 열을 기준으로 데이터 프레임 필터링 및 변형
ifelse()
함수를 사용하여 조건에 따라 동일한 이름의 열을 기준으로 데이터 프레임을 필터링하고 변형할 수 있습니다. 다음 코드는 df1
의 age
열이 df2
의 age
열보다 크면 gender
열을 "Old"로, 그렇지 않으면 "Young"으로 설정합니다.
df1 <- df1 %>%
mutate(gender = ifelse(age > df2$age, "Old", "Young"))
print(df1)
#> # A tibble: 3 × 4
#> id name age gender
#> <dbl> <chr> <dbl> <chr>
#> 1 1 Alice 20 Young
#> 2 2 Bob 21 Young
#> 3 3 Carol 22 Old
추가 정보
예제 코드
library(tidyverse)
# 데이터 프레임 생성
df1 <- data.frame(id = c(1, 2, 3), name = c("Alice", "Bob", "Carol"), age = c(20, 21, 22))
df2 <- data.frame(id = c(1, 2, 3), gender = c("Female", "Male", "Female"))
# 1. `mutate()` 함수를 사용하여 동일한 이름의 열을 기준으로 새로운 열 만들기
df1 <- df1 %>%
mutate(gender = df2$gender[match(id, df2$id)])
# 2. `filter()` 함수를 사용하여 동일한 이름의 열을 기준으로 데이터 프레임 필터링
df_filtered <- df1 %>%
filter(gender == "Female")
# 3. 조건에 따라 동일한 이름의 열을 기준으로 데이터 프레임 필터링 및 변형
df1 <- df1 %>%
mutate(gender = ifelse(age > df2$age, "Old", "Young"))
# 결과 출력
print(df1)
print(df_filtered)
실행 결과
# A tibble: 3 × 4
# id name age gender
# <dbl> <chr> <dbl> <chr>
# 1 1 Alice 20 Female
# 2 2 Bob 21 Male
# 3 3 Carol 22 Female
# A tibble: 2 × 4
# id name age gender
# <dbl> <chr> <dbl> <chr>
# 1 1 Alice 20 Female
# 2 3 Carol 22 Female
# A tibble: 3 × 4
# id name age gender
# <dbl> <chr> <dbl> <chr>
# 1 1 Alice 20 Young
# 2 2 Bob 21 Young
# 3 3 Carol 22 Old
추가 정보
동일한 이름의 열을 기준으로 필터링 및 변형하는 대체 방법
inner_join() 함수
inner_join()
함수는 두 데이터 프레임을 공통된 열을 기준으로 결합합니다. 다음 코드는 df1
과 df2
를 id
열을 기준으로 결합하고, 결합된 데이터 프레임에서 gender
열을 선택합니다.
df_joined <- inner_join(df1, df2, by = "id")
df_filtered <- select(df_joined, id, name, age, gender)
print(df_filtered)
left_join() 함수
df_joined <- left_join(df1, df2, by = "id")
df_filtered <- select(df_joined, id, name, age, gender)
print(df_filtered)
anti_join()
함수는 왼쪽 데이터 프레임에서 오른쪽 데이터 프레임과 공통된 열을 가진 행을 제거합니다. 다음 코드는 df1
에서 df2
와 id
열을 기준으로 공통된 행을 제거합니다.
df_filtered <- anti_join(df1, df2, by = "id")
print(df_filtered)
rename() 함수
rename()
함수는 열 이름을 변경합니다. 다음 코드는 df2
의 gender
열 이름을 gender2
로 변경합니다.
df2 <- rename(df2, gender2 = gender)
print(df2)
선택 방법
사용할 방법은 특정 상황에 따라 다릅니다. 일반적으로 다음과 같은 경우에 각 방법을 사용하는 것이 좋습니다.
inner_join()
: 두 데이터 프레임의 모든 행을 유지하고 싶을 때left_join()
: 왼쪽 데이터 프레임의 모든 행을 유지하고 오른쪽 데이터 프레임에서 일치하는 행만 포함하고 싶을 때anti_join()
: 왼쪽 데이터 프레임에서 오른쪽 데이터 프레임과 공통된 행을 제거하고 싶을 때rename()
: 열 이름을 변경하고 싶을 때
추가 정보
r tidyverse calculated-columns