data.frame에서 결측값을 보고하는 우아한 방법
데이터 프레임에서 누락된 값을 가진 변수를 보고하기 위해 작성한 작은 코드 조각입니다.data.frame을 반환하는 좀 더 우아한 방법을 생각해보려고 하는데 막막합니다.
for (Var in names(airquality)) {
missing <- sum(is.na(airquality[,Var]))
if (missing > 0) {
print(c(Var,missing))
}
}
편집: 저는 수십에서 수백 개의 변수를 가진 data.frame을 다루고 있으므로 누락된 값을 가진 변수만 보고하는 것이 핵심입니다.
그냥 사용.sapply
> sapply(airquality, function(x) sum(is.na(x)))
Ozone Solar.R Wind Temp Month Day
37 7 0 0 0 0
사용할 수도 있습니다.apply
아니면colSums
에 의해 생성된 매트릭스 상에서is.na()
> apply(is.na(airquality),2,sum)
Ozone Solar.R Wind Temp Month Day
37 7 0 0 0 0
> colSums(is.na(airquality))
Ozone Solar.R Wind Temp Month Day
37 7 0 0 0 0
제가 새롭게 선호하는 (너무 넓지 않은) 데이터는 우수한 나노어 패키지의 방법입니다.주파수뿐만 아니라 누락 패턴도 보입니다.
library(naniar)
library(UpSetR)
riskfactors %>%
as_shadow_upset() %>%
upset()
결측값이 있는 산점도를 표시하면 결측값이 결측값이 아닌 것과 관련하여 어디에 있는지 확인하는 것이 유용합니다.
ggplot(airquality,
aes(x = Ozone,
y = Solar.R)) +
geom_miss_point()
또는 범주형 변수의 경우:
gg_miss_fct(x = riskfactors, fct = marital)
이러한 예는 다른 흥미로운 시각화를 나열하는 패키지 비넷에서 가져온 것입니다.
사용할 수 있습니다.map_df
삐걱삐걱
library(mice)
library(purrr)
# map_df with purrr
map_df(airquality, function(x) sum(is.na(x)))
# A tibble: 1 × 6
# Ozone Solar.R Wind Temp Month Day
# <int> <int> <int> <int> <int> <int>
# 1 37 7 0 0 0 0
summary(airquality)
이미 당신에게 이 정보를 주고 있습니다.
VIM 패키지는 data.frame에 대한 멋진 누락 데이터 그림도 제공합니다.
library("VIM")
aggr(airquality)
또 다른 그래픽 대안 -plot_missing
탁월한 기능을 발휘함DataExplorer
패키지:
문서들은 또한 이 결과들을 저장하여 추가적인 분석에 사용할 수 있다는 점을 지적합니다.missing_data <- plot_missing(data)
.
좀 더 간결하게-sum(is.na(x[1]))
그것은
x[1]
첫번째 열을 보세요.is.na()
사실이라면NA
sum()
TRUE
가1
,FALSE
가0
누락된 데이터를 확인하는 데 도움이 되는 또 다른 기능은 funModeling 라이브러리의 df_status입니다.
library(funModeling)
iris.2는 일부 NA가 추가된 홍채 데이터 세트입니다.이것을 데이터 세트로 대체할 수 있습니다.
df_status(iris.2)
이렇게 하면 각 열의 NA 수와 백분율을 알 수 있습니다.
하나의 그래픽 솔루션을 위해,visdat
패키지 상품vis_miss
.
library(visdat)
vis_miss(airquality)
와 매우 비슷합니다.Amelia
출력값은 박스에서 누락된 경우 %s을(를) 제공하는 작은 차이가 적습니다.
아멜리아 도서관은 누락된 데이터를 잘 처리한다고 생각합니다. 누락된 행을 시각화할 수 있는 지도도 포함하고 있습니다.
install.packages("Amelia")
library(Amelia)
missmap(airquality)
다음 코드를 실행하면 na의 논리값이 반환됩니다.
row.has.na <- apply(training, 1, function(x){any(is.na(x))})
또 다른 그래픽 및 대화형 방법은is.na10
로부터의 기능heatmaply
라이브러리:
library(heatmaply)
heatmaply(is.na10(airquality), grid_gap = 1,
showticklabels = c(T,F),
k_col =3, k_row = 3,
margins = c(55, 30),
colors = c("grey80", "grey20"))
대규모 데이터셋에서는 잘 작동하지 않을 수도 있습니다.
A dplyr
카운트를 구하는 솔루션은 다음과 같습니다.
summarise_all(df, ~sum(is.na(.)))
또는 백분율을 구하려면:
summarise_all(df, ~(sum(is_missing(.) / nrow(df))))
누락된 데이터는 보기 흉하고 일관성이 없으며 항상 다음과 같이 코드화되지 않을 수도 있습니다.NA
출처에 따라 또는 수입 시 처리 방법에 따라 변경할 수 있습니다.데이터와 누락된 것으로 간주할 사항에 따라 다음 기능이 조정될 수 있습니다.
is_missing <- function(x){
missing_strs <- c('', 'null', 'na', 'nan', 'inf', '-inf', '-9', 'unknown', 'missing')
ifelse((is.na(x) | is.nan(x) | is.infinite(x)), TRUE,
ifelse(trimws(tolower(x)) %in% missing_strs, TRUE, FALSE))
}
# sample ugly data
df <- data.frame(a = c(NA, '1', ' ', 'missing'),
b = c(0, 2, NaN, 4),
c = c('NA', 'b', '-9', 'null'),
d = 1:4,
e = c(1, Inf, -Inf, 0))
# counts:
> summarise_all(df, ~sum(is_missing(.)))
a b c d e
1 3 1 3 0 2
# percentage:
> summarise_all(df, ~(sum(is_missing(.) / nrow(df))))
a b c d e
1 0.75 0.25 0.75 0 0.5
특정 열에 대해 작업을 수행하려면 이 작업을 사용할 수도 있습니다.
length(which(is.na(airquality[1])==T))
ExPanDaR의 패키지 기능을 사용하여 패널 데이터를 탐색할 수 있습니다.
배관의 경우 다음과 같이 적을 수 있습니다.
# Counts
df %>% is.na() %>% colSums()
# % of missing rounded to 2 decimals
df %>% summarise_all(.funs = ~round(100*sum(is.na(.))/length(.),2))
언급URL : https://stackoverflow.com/questions/8317231/elegant-way-to-report-missing-values-in-a-data-frame
'programing' 카테고리의 다른 글
WordPress 내부의 작성자 보관 페이지에서 작성자 이름 가져오기 (0) | 2023.10.12 |
---|---|
DataSet/DataTable을 반환하는 PowerShell 함수의 이상한 동작 (0) | 2023.10.12 |
org.apache.poi.POIXMLException Strict OOXML은 현재 지원되지 않습니다. 버그 #57699를 참조하십시오. (0) | 2023.10.12 |
Laravel 5 변경 public_path() (0) | 2023.10.12 |
Android Studio에서 ar 파일 만들기 (0) | 2023.10.07 |