R에서 NA를 0으로 바꾸기
R의 데이터 프레임에서NA
를 0으로 바꾸는 간단한 방법이 있습니다.my_data
라는 데이터 프레임이 있다고 가정합니다. 해당 데이터 프레임에서 모든 NA
값을 0으로 바꾸려면이 문을 실행할 수 있습니다.
my_data[is.na(my_data)] <- 0
예를 들어my_data
에 아래 내용이있는 경우.
C1 C2 C3 C4 C5
1 4 3 <NA> 3 7
2 9 8 ABC 5 10
3 1 1 XYZ 3 6
4 NA 4 <NA> 7 10
5 1 2 ZC1 NA 2
my_data[is.na(my_data)] <- 0
을 실행하면 데이터 프레임의 내용이 이것으로 변경됩니다.
C1 C2 C3 C4 C5
1 4 3 0 3 7
2 9 8 ABC 5 10
3 1 1 XYZ 3 6
4 0 4 0 7 10
5 1 2 ZC1 0 2
더 큰 R 데이터 프레임에서 NA를 0으로 대체
이전 솔루션은 상대적으로 작은 데이터 프레임이있을 때 잘 작동하는 Base R 하위 집합 재 할당을 사용합니다. 그러나 더 큰 데이터 세트의 경우 최신 버전의dplyr
패키지에 구현 된 새로운 하이브리드 평가 방식과 같은 더 빠른 대안이 필요할 수 있습니다.
dplyr
패키지에서 채택한 새로운 접근 방식은 전체 표현식을 인식하고이를 평가하기 위해 C++ 코드를 사용합니다. 이러한 방식으로 빅 데이터 프레임을 처리 할 때 최대 30 % 더 빠른 변환을 달성 할 수 있습니다.
dplyr
패키지를 사용하여NA
값을 0으로 바꾸려면 아래 예와 같이_all
범위 동사가있는mutate
함수와purrr
형식의replace
함수를 사용할 수 있습니다.
my_data <- mutate_all(my_data, ~replace(., is.na(.), 0))
purrr
표기법을 사용하면 각 데이터 프레임 요소에 replace
기능을 적용 할 수 있습니다.
R 데이터 프레임의 하위 집합에서 NA를 0으로 바꾸기
mutate
함수의_all
범위 동사 대신_at
범위 동사를 사용하여 특정 열로 대체 작업을 제한 할 수 있습니다. 이를 위해 대체를 적용 할 열 이름이있는 벡터를 포함 할 수 있습니다. 이전 데이터 프레임을 사용하여 C1
및 C4
열에서만 NA
값을 교체해야하는 경우 다음 명령을 사용할 수 있습니다.
my_data <- mutate_at(my_data, c("C1", "C4"), ~replace(., is.na(.), 0))
이렇게하면 C1
과 C4
열의 NA 만 0으로 대체되어 아래와 같은 데이터 프레임이 생성됩니다.
C1 C2 C3 C4 C5
1 4 3 <NA> 3 7
2 9 8 ABC 5 10
3 1 1 XYZ 3 6
4 0 4 <NA> 7 10
5 1 2 ZC1 0 2
이전 예에서 C3
과 같은 영숫자 열에 0 값을 포함하지 않도록 숫자 열에서만 NA
를 0으로 바꾸고 싶을 수 있습니다. 이 경우 대체를 적용 할 열을 지정하는 대신is.numeric
조건과 함께mutate_if
함수를 사용하여 R에게 숫자 열에서만NA
를 0으로 바꾸도록 지시 할 수 있습니다. 다음 예에서는dplyr
패키지 설치 및 데이터 프레임 채우기에서 교체 수행 및 결과 표시에 이르기까지이를 시도 할 수있는 전체 코드를 찾을 수 있습니다.
install.packages("dplyr")
library(dplyr)
C1 <- c(4, 9, 1, NA, 1)
C2 <- c(3, 8, 1, 4, 2)
C3 <- c(NA, 'ABC', 'XYZ', NA, 'ZC1')
C4 <- c(3, 5, 3, 7, NA)
C5 <- c(7, 10, NA, 10, 2)
my_data <- data.frame(C1, C2, C3, C4, C5)
my_data <- mutate_if(my_data, is.numeric, ~replace(., is.na(.), 0))
my_data
출력:
C1 C2 C3 C4 C5
1 4 3 <NA> 3 7
2 9 8 ABC 5 10
3 1 1 XYZ 3 0
4 0 4 <NA> 7 10
5 1 2 ZC1 0 2
mutate()
함수 및 그 변형에 대한 자세한 정보는 R 문서에서 확인할 수 있습니다.