12. R์ ๋ฆฌ (๋ฐ์ดํฐ ์์ /๊ฐ๊ณต)
4. ๋ฐ์ดํฐ ์์ ํ๊ธฐ
โ ๋ณ์๋ช
๋ฐ๊พธ๊ธฐ : rename(๋ณ์๋ช
, ์์ ์ ๋ณ์๋ช
= ์์ ํ ๋ณ์๋ช
)
dplyr ํจํค์ง ์ค์น/๋ก๋
install.package("dp1yr")
library(dp1yr)
โก ํ์๋ณ์ ๋ง๋ค๊ธฐ (์๋ก์ด ์ด ์ถ๊ฐ)
DF๋ช
$ํ์๋ณ์ = DF๋ช
$๊ธฐ์กด๋ณ์ + DF๋ช
$๊ธฐ์กด๋ณ์
DF๋ช
$ํ์๋ณ์ = (DF๋ช
$๊ธฐ์กด๋ณ์ + DF๋ช
$๊ธฐ์กด๋ณ์)/2
โข ์กฐ๊ฑด๋ฌธ์ผ๋ก ํฉ๊ฒฉ ํ์ ๋ณ์ ๋ง๋ค๊ธฐ
ifelse(DF๋ช
$๋ณ์ ๋ช
๊ณผ ์กฐ๊ฑด, "์ฐธ์ผ ๋ ๋ถ์ฌ", "๊ฑฐ์ง์ผ ๋ ๋ถ์ฌ")
์ฌ๋ฌ ๊ฐ์ ์กฐ๊ฑด ์ค์
ifelse (DF๋ช
$๋ณ์๋ช
๊ณผ ์กฐ๊ฑด, "์ฐธ์ผ ๋ ๋ถ์ฌ", "๊ฑฐ์ง์ผ ๋ ๋ถ์ฌ",
ifelse(DF๋ช
$๋ณ์๋ช
๊ณผ ์กฐ๊ฑด, "์ฐธ์ผ ๋ ๋ถ์ฌ", "๊ฑฐ์ง์ผ ๋ ๋ถ์ฌ"))
โฃ ์ถ๋ ฅํ๊ธฐ
table(DF๋ช
$๋ณ์๋ช
) : ๋น๋ํ ์ถ๋ ฅ
qplot(DF๋ช
$๋ณ์๋ช
) : ๋น๋ ๋ง๋๊ทธ๋ํ ์ถ๋ ฅ
5. ๋ฐ์ดํฐ ๊ฐ๊ณตํ๊ธฐ
* dplyr ํจํค์ง์ ํจ์์ ๊ธฐ๋ฅ
filter() ํ ์ถ์ถ
select() ์ด(๋ณ์) ์ถ์ถ
arrange() ์ ๋ ฌ
mutate() ๋ณ์ ์ถ๊ฐ
summarise() ํต๊ณ์น ์ฐ์ถ
group_by() ์ง๋จ๋ณ๋ก ๋๋๊ธฐ
left_join() ์ด ๋ฐ์ดํฐ ํฉ์น๊ธฐ
bind_rows() ํ ๋ฐ์ดํฐ ํฉ์น๊ธฐ
ํ ์ถ์ถ
%>% ~ filter ํจ์
โ ํจํค์ง ๋ก๋&๋ฐ์ดํฐ ์ค๋น
library(dplyr)
DF๋ช
= read.csv("ํ์ผ๋ช
")
โก ํ ๊ฐ์ง ์กฐ๊ฑด ์ถฉ์กฑํ๋ ํ ์ถ์ถ
DF๋ช
%>% filter(๋ณ์๋ช
== n) : DF์์ ๋ณ์ ๊ฐ์ด n์ธ ๊ฒฝ์ฐ
DF๋ช
%>% filter(๋ณ์๋ช
!= n) : DF์์ ๋ณ์ ๊ฐ์ด n์ด ์๋ ๊ฒฝ์ฐ
DF๋ช
%>% filter(๋ณ์๋ช
> n) : DF์์ ๋ณ์ ๊ฐ์ด n์ ์ด๊ณผํ ๊ฒฝ์ฐ
โข ์ฌ๋ฌ ์กฐ๊ฑด ์ถฉ์กฑํ๋ ํ ์ถ์ถ
DF๋ช
%>% filter(๋ณ์๋ช
1 == 1 & ๋ณ์๋ช
2 >=50) : ๋ณ์ ๊ฐ 1์ด 1๊ณผ ๊ฐ๊ณ , ์นผ๋ผ ๊ฐ 2๊ฐ 50์ด์์ธ ๊ฒฝ์ฐ
DF๋ช
%>% filter(๋ณ์๋ช
1 == 1 | ๋ณ์๋ช
2 >=50) : ๋ณ์ ๊ฐ 1์ด 1์ด๊ฑฐ๋, ์นผ๋ผ ๊ฐ 2๊ฐ 50์ด์์ธ ๊ฒฝ์ฐ
DF๋ช
%>% filter(๋ณ์๋ช
%in% c(1,3,5)) : ๋ณ์ ๊ฐ์ด 1,3,5์ ๋นํ๋ฉด ์ถ์ถ
โฃ ์ถ์ถํ ํ์ผ๋ก ๋ฐ์ดํฐ ๋ง๋ค๊ธฐ
df1 = DF๋ช
%>% filter(๋ณ์๋ช
== 1) : ๋ณ์ ๊ฐ์ด 1์ธ ํ ์ถ์ถ, df1์ ํ ๋น
์ด ์ถ์ถ
%>% ~ slelct ํจ์
โ ํ๊ฐ์ง ์กฐ๊ฑด ์ถฉ์กฑํ๋ ํ ์ถ์ถ
DF๋ช
%>% filter(๋ณ์๋ช
) : DF์์ ๋ณ์ ๊ฐ ์ถ์ถ
DF๋ช
%>% filter(๋ณ์๋ช
1, ๋ณ์๋ช
2, ๋ณ์๋ช
3) : DF์์ ๋ณ์ ๊ฐ 1,2,3 ์ถ์ถ
DF๋ช
%>% filter(-๋ณ์๋ช
) : DF์์ ๋ณ์ ๊ฐ๋ง ์ ์ธํ๊ณ ์ถ์ถ
โก ์ฌ๋ฌ ์กฐ๊ฑด ์ถฉ์กฑํ๋ ํ ์ถ์ถ
DF๋ช
%>% filter(๋ณ์๋ช
1 == 1) %>% select (๋ณ์๋ช
2)
๋ณ์๊ฐ์ด 1์ธ ํ๋ง ์ถ์ถํ ๋ค์, ๋ณ์๊ฐ2 ์ถ์ถ
์์๋๋ก ์ ๋ ฌํ๊ธฐ
โ DF๋ช
%>% arrange(๋ณ์๋ช
) : ๋ณ์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
โก DF๋ช
%>% arrange(desc(๋ณ์๋ช
) : ๋ณ์ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
โข DF๋ช
%>% arrange(๋ณ์๋ช
1, ๋ณ์๋ช
2) : ๋ณ์1 ์ค๋ฆ์ฐจ์ ์ ๋ ฌ > ๋ณ์2 ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
ํ์๋ณ์ ์ถ๊ฐํ๊ธฐ
ํ์๋ณ์? ์ฐ์ฐ์ ํตํด ์ป์ ์๋ก์ด ๊ฒฐ๊ณผ๋ก ์๋ก์ด ๋ณ์๋ฅผ ์์ฑํ๋ ๊ฒ
โ DF๋ช
%>% mutate(์๋ก ๋ง๋ค๊ณ ์ถ์ ๋ณ์๋ช
= ๊ธฐ์กด ๋ณ์ ์ด์ฉํ ์กฐ๊ฑด) %>%
โก DF๋ช
%>% mutate(์๋ก ๋ง๋ค๊ณ ์ถ์ ๋ณ์๋ช
= ๊ธฐ์กด ๋ณ์ ์ด์ฉํ ์กฐ๊ฑด,
์๋ก ๋ง๋ค๊ณ ์ถ์ ๋ณ์๋ช
= ๊ธฐ์กด ๋ณ์ ์ด์ฉํ ์กฐ๊ฑด, )) %>%
ex) mutate(total = math+english+science, #์ดํฉ ๋ณ์ ์ถ๊ฐ
mean = (math, english+science)/3) %>% #์ดํ๊ท ๋ณ์ ์ถ๊ฐ
โข DF๋ช
%>% mutate(์๋ก ๋ง๋ค๊ณ ์ถ์ ๋ณ์๋ช
= ifelse(๋ณ์๋ช
>= 60, "์ฐธ์ผ ๋ ๋ถ์ฌ", "๊ฑฐ์ง์ผ ๋ ๋ถ์ฌ")) %>%
โฃ DF๋ช
%>% mutate(์๋ก ๋ง๋ค๊ณ ์ถ์ ๋ณ์๋ช
= ์๋ก ๋ง๋ค๊ณ ์ถ์ ๋ณ์๋ช
= ๊ธฐ์กด ๋ณ์ ์ด์ฉํ ์กฐ๊ฑด) %>% arrange (์๋ก ๋ง๋ค๊ณ ์ถ์ ๋ณ์๋ช
) %>%
6. ์ง๋จ๋ณ๋ก ์์ฝํ๊ธฐ/ํฉ์น๊ธฐ
์ง๋จ๋ณ๋ก ์์ฝํ๊ธฐ
โ DF๋ช
>%> group_by (๋ณ์๋ช
1) %>% #๋ณ์๋ช
1๋ณ๋ก ๋ถ๋ฆฌ
summarise(์๋ก ๋ง๋ค ๋ณ์๋ช
=mean(๋ณ์๋ช
2)) #๋ณ์๊ฐ2์ ํ๊ท ์ฐ์ถ
โก ์ฌ๋ฌ ์์ฝํต๊ณ๋ ํ ๋ฒ์ ์ฐ์ถํ๊ธฐ
DF๋ช
>%> group_by (๋ณ์๋ช
1) %>%
summarise(์๋ก ๋ง๋ค ๋ณ์๋ช
=mean(๋ณ์๋ช
2),
์๋ก ๋ง๋ค ๋ณ์๋ช
= sum(๋ณ์๋ช
2), #๋ณ์๊ฐ2์ ํฉ๊ณ
์๋ก ๋ง๋ค ๋ณ์๋ช
= median(๋ณ์๋ช
2)) #๋ณ์๊ฐ2์ ์ค์๊ฐ
โข ๊ฐ ์ง๋จ๋ณ๋ก ๋ค์ ์ง๋จ ๋๋๊ธฐ
DF๋ช
%>%
group_by(1์์๋ก ๊ทธ๋ฃน ๋๋ ๋ณ์๋ช
, 2์์๋ก ๊ทธ๋ฃน ๋๋ ๋ณ์๋ช
) %>%
summarise(์๋ก ๋ง๋ค ๋ณ์๋ช
=mean(๋ณ์๋ช
)) %>% #์๋ก ๋ง๋ค ๋ณ์๋ช
์ด 3์์๋ก ์ฒ๋ฆฌ
๋ฐ์ดํฐ ํฉ์น๊ธฐ
โ ๊ฐ๋ก๋ก ํฉ์น๊ธฐ
์๋ก์ด ๋ณ์๋ช
= left_join (DF1, DF2, by="๋ณ์๋ช
") : ๋ณ์๋ช
์ ๊ธฐ์ค์ผ๋ก DF1๊ณผ DF2 ๊ฒฐํฉ
โก ์ธ๋ก๋ก ํฉ์น๊ธฐ
์๋ก์ด ๋ณ์๋ช
= bind_rows(DF1, DF2) : DF1, DF2 ํฉ์ณ์ ์๋ก์ด ๋ณ์๋ช
์ ํ ๋น