๊ฒฐ์ธก์น ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ ๋ํ์ฌ ์์๋ณด์.
โก ๊ฒฐ์ธก์น ํ์ธ
In:
library(MASS)
df_car = Cars93
df_car %>%
sapply(function(x) sum(is.na(x)))
Out:
Manufacturer Model Type
0 0 0
Min.Price Price Max.Price
0 0 0
MPG.city MPG.highway AirBags
0 0 0
DriveTrain Cylinders EngineSize
0 0 0
Horsepower RPM Rev.per.mile
0 0 0
Man.trans.avail Fuel.tank.capacity Passengers
0 0 0
Length Wheelbase Width
0 0 0
Turn.circle Rear.seat.room Luggage.room
0 2 11
Weight Origin Make
0 0 0
โท MASS ํจํค์ง์ ํฌํจ๋ Cars93 ๋ฐ์ดํฐ๋ฅผ ์คํ์ ์ฌ์ฉํ ๊ฒ์ด๋ค.
โท ์์ ๊ฒฐ๊ณผ๋ is.na ํจ์์ sum ํจ์๋ฅผ ์ด์ฉํ์ฌ, ๊ฐ ์ด์ ํฌํจ๋ ๊ฒฐ์ธก์น์ ์์ด๋ค. Luggage.room๊ณผ Rear.seat.room๋ง ๊ฒฐ์ธก์น๋ฅผ ํฌํจํ๊ณ ์๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ๋ค.
In:
complete.cases(df_car)
Out:
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[11] TRUE TRUE TRUE TRUE TRUE FALSE FALSE TRUE FALSE TRUE
[21] TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE
[31] TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE
[41] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[51] TRUE TRUE TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE
[61] TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE FALSE
[71] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[81] TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE FALSE TRUE
[91] TRUE TRUE TRUE
โท complete.cases ํจ์๋ ๋ฐ์ดํฐํ๋ ์์ ๊ฒฐ์ธก์น๊ฐ ํฌํจ๋์ง ์์ ํ์๋ TRUE๋ฅผ, ์๋ ๊ฒฝ์ฐ๋ FALSE๋ฅผ ์ถ๋ ฅํ๋ค.
โก ๊ฒฐ์ธก์น ์ ๊ฑฐ
In:
cnt_1 = sum(complete.cases(df_car))
cnt_2 = df_car %>%
na.omit() %>%
nrow()
cnt_1 == cnt_2
Out:
[1] TRUE
โท cnt_1 ๋ณ์๋ complete.cases ํจ์๋ฅผ ํตํด ๊ตฌํ ํ์ ๊ฐ์, cnt_2 ๋ณ์๋ na.omit ํจ์๋ฅผ ์ํํ ๋ค์ ํ์ ๊ฐ์์ด๋ค. ์ ๊ฒฐ๊ณผ์์ ๋ณด๋ค์ํผ ์ด ๋์ ๊ฐ๋ค. ์ฆ, na.omit ํจ์๋ ๊ฒฐ์ธก์น๊ฐ ํฌํจ๋ ํ์ ์ ์ธ์์ผ์ฃผ๋ ์ญํ ์ ํ๋ค.
โก ๊ฒฐ์ธก์น๊ฐ ํฌํจ๋ ๋ฒกํฐ์ ์ฐ์ฐ
In:
sum(df_car$Luggage.room)
sum(df_car$Luggage.room, na.rm = TRUE)
median(df_car$Luggage.room)
median(df_car$Luggage.room, na.rm = TRUE)
Out:
[1] NA
[1] 1139
[1] NA
[1] 14
โท ๊ฒฐ์ธก์น๊ฐ ํฌํจ๋ ๋ฒกํฐ๋ฅผ ๊ณ์ฐํ ๋๋ ์ฐ์ฐ์ na.rm ์ธ์๋ฅผ TRUE๋ก ์ฃผ์ด, ๊ณ์ฐํด์ผ ํ๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ, NA ๊ฐ์ด ์ถ๋ ฅ๋๋ค.
โก ๊ฒฐ์ธก์น ๋์ฒด
In:
df_car_compl = sapply(df_car, function(x) ifelse(is.na(x), mean(x, na.rm = TRUE), x)) %>%
as.data.frame()
โท ์์์ ๊ฒฐ์ธก์น๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ, ํด๋น ์ด์ ํ๊ท ์ผ๋ก ๋์ฒดํ๊ธฐ ์ํ ์ฝ๋์ด๋ค.
In:
group = c(rep('a', 5), rep('b', 5))
value = c(1, 2, 3, NaN, 6, 2, 4, NaN, 10, 8)
df = data.frame(group, value)
df
df %>%
group_by(group) %>%
mutate(value = ifelse(is.na(value), mean(value, na.rm = TRUE), value))
Out:
group value
1 a 1
2 a 2
3 a 3
4 a NaN
5 a 6
6 b 2
7 b 4
8 b NaN
9 b 10
10 b 8
# A tibble: 10 x 2
# Groups: group [2]
group value
<fct> <dbl>
1 a 1
2 a 2
3 a 3
4 a 3
5 a 6
6 b 2
7 b 4
8 b 6
9 b 10
10 b 8
โท value ์ด์ ๊ฒฐ์ธก์น๋ฅผ ํด๋นํ๋ group์ ํ๊ท ์ผ๋ก ๋์ฒดํ๊ธฐ ์ํ ์ฝ๋์ด๋ค. ์ด๋ ์์ ์ฝ๋์ ๋ค๋ฅธ ์ ์ ์ฐ์ฐ์ ์ํํ๊ธฐ ์ , group_by ํจ์๋ฅผ ํตํด ์ฐ์ฐํ๋ ๋์์ ๋ฒ์๋ฅผ ํ์ ์์ผฐ๋ค๋ ์ ์ด๋ค. ๋ง์ฝ ์ด ์ฝ๋๊ฐ ์๋ค๋ฉด value ์ด์ ํ๊ท ์ผ๋ก ๋์ฒด๋๋ค.
'Programming > R' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
caret ์ฌ์ฉ๋ฒ (0) | 2020.10.22 |
---|---|
dplyr ์ฌ์ฉ๋ฒ (0) | 2020.10.22 |
CSV ํ์ผ ์ฝ๊ธฐ/์ฐ๊ธฐ (0) | 2020.10.21 |
๋ฌธ์์ด ๋ฐ์ดํฐ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ (0) | 2020.10.20 |
์๊ณ์ด ๋ฐ์ดํฐ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ (0) | 2020.10.20 |