์์ ์ฝ์ ํจํค์ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
install.packages("readxl")
library(readxl)
read_excel("์ฝ์ ํ์ผ์ด ์๋ ์์น")
ex) read_excel("C:/R/excel_exam.xlsx")

read.csv("์ฝ์ ํ์ผ")
ex) read.csv("C:/R/csv_exam.csv")

๋จผ์ ๊ฐ์ด ๋๋ฌด ๋ง์ผ๋๊น 6์ด ๊น์ง๋ง df์ ์ ์ฅ
๐ ๋ฐฉ๋ฒ 1
> df <- read.csv("C:/R/csv_exam.csv")[1:6,]
> df
id class math english science
1 1 1 50 98 50
2 2 1 60 97 60
3 3 1 45 86 78
4 4 1 30 98 58
5 5 2 25 80 65
6 6 2 50 89 98
๐ ๋ฐฉ๋ฒ 2
> df <- read.csv("C:/R/csv_exam.csv")[1:5, 3:5]
> df
math english science
1 50 98 50
2 60 97 60
3 45 86 78
4 30 98 58
5 25 80 65
๐ ๋ฐฉ๋ฒ 3
> df <- read.csv("C:/R/csv_exam.csv")[1:5, -c(1,2)]
> df
math english science
1 50 98 50
2 60 97 60
3 45 86 78
4 30 98 58
5 25 80 65
์ ์ฅ
> # write.csv(๋ฌด์์(๊ฐ์ฒด๋ฅผ), ์ด๋ค์ด๋ฆ์ผ๋ก ์ ์ฅํ ๊ฒ์ธ๊ฐ)
> write.csv(df, "csv_test.txt")
> write.csv(df, "csv_text.csv")
์คํ์

์์ฝํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ด๋ด๋๋ read.csv()๋ read.table() ํจ์ ๋ค์ fileEncoding="euc-kr" ํน์ fileEncoding="cp949" ์ด๋ผ๋ ์ต์
์ ๋ฃ์ด๋ณด๊ธธ
read.csv("C:/R/ํ๊ธํ์ผ์ด๋ฆ.csv", fileEncoding = "euc-kr")
read.csv("c:/r/ํ๊ธํ์ผ์ด๋ฆ.csv", fileEncoding = "cp949")
+) ํ์ผ์ด ์ง๊ธ ๋ด working directory ๋ฐ์ ์๋ค๋ฉด ์์ฒ๋ผ ์ผ์ผํ ์์ธ ๊ฒฝ๋ก๋ฅผ ์ ์ด์ฃผ์ง ์์๋ ๋๋ค.
read.csv("C:/R/ํ๊ธํ์ผ์ด๋ฆ.csv")
read.csv("ํ๊ธํ์ผ์ด๋ฆ.csv")
๋์ ๋๊ฐ์ด ๋์
โด๋ง์ฝ ๊ฒฝ๋ก ์ง์ ์ํ๊ณ ํ์ผ ์ด๋ฆ๋ง ์จ์ ๋ถ๋ฌ์ค๊ณ ์ถ๋ค๋ฉด
์ง๊ธ ๋ด getwd()๋ฅผ ํ์ธํด ๊ทธ ๋ฐ์ ๋ถ๋ฌ์ฌ ํ์ผ์ ๋ฃ์ด๋ณด์๊ธธ
๐ head() : ์์์ ๋ช ์ค ์ถ๋ ฅํ ๊ฒ์ธ๊ฐ?
default๊ฐ์ 6
[์ฌ์ฉ์์] head(df)
head(df, 2) -- ์์์ ๋ถํฐ 2์ค ์ถ๋ ฅ
๐ tail() : ๋ค์์๋ถํฐ ๋ช ์ค ์ถ๋ ฅํ ๊ฒ์ธ๊ฐ?
default๊ฐ์ 6
[์ฌ์ฉ์์] tail(df)
tail(df, 3) -- ๋ค์์ 3์ค ์ถ๋ ฅ
๐ str() : ๋ฐ์ดํฐ ์์ฑ ํ์ธ
[์ฌ์ฉ์์]
> str(df)
tibble [20 ร 5] (S3: tbl_df/tbl/data.frame)
$ id : num [1:20] 1 2 3 4 5 6 7 8 9 10 ...
$ class : num [1:20] 1 1 1 1 2 2 2 2 3 3 ...
$ math : num [1:20] 50 60 45 30 25 50 80 90 20 50 ...
$ english: num [1:20] 98 97 86 98 80 89 90 78 98 98 ...
$ science: num [1:20] 50 60 78 58 65 98 45 25 15 45 ...
๊ฐ ์ปฌ๋ผ ๋ช
: ์ปฌ๋ผ ํ์
[๋ฐ์ดํฐ๊ฐ ๋ช๊ฐ์๋๊ฐ] ์์๋ก ๋ณด์ฌ์ฃผ๋ ๊ฐ
๐ summary() : ์์ฝ ํต๊ณ ์ถ๋ ฅ
[์ฌ์ฉ์์]
> summary(df)
id class math english
Min. : 1.00 Min. :1 Min. :20.00 Min. :56.0
1st Qu.: 5.75 1st Qu.:2 1st Qu.:45.75 1st Qu.:78.0
Median :10.50 Median :3 Median :54.00 Median :86.5
Mean :10.50 Mean :3 Mean :57.45 Mean :84.9
3rd Qu.:15.25 3rd Qu.:4 3rd Qu.:75.75 3rd Qu.:98.0
Max. :20.00 Max. :5 Max. :90.00 Max. :98.0
science
Min. :12.00
1st Qu.:45.00
Median :62.50
Mean :59.45
3rd Qu.:78.00
Max. :98.00
์ง์ง ์์ฝ์ด๋ค. ํด๋น ์ปฌ๋ผ์ ์ต์๊ฐ, ์ต๋๊ฐ, ํ๊ท ๊ฐ๋ฑ์ ํ์ธ ๊ฐ๋ฅ
# ํจํค์ง๊ฐ ์๋ค๋ฉด ํจํค์ง ์ค์น๋ถํฐ
# install.packages("dplyr")
# dplyr ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉํ๊ฒ ๋ค ๋ถ๋ฌ์ค๊ธฐ
library(dplyr)
๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ 5๊ฐ๋ณด๊ธฐ
filter() : ํ ์ถ์ถ๐ filter(.data, ...)
.data : ์ด๋ค ๋ฐ์ดํฐ ํ๋ ์์ ๋ํ์ฌ
... : ์ด๋ค ์กฐ๊ฑด์ ๊ฑธ ๊ฒ์ธ๊ฐ
[์ฌ์ฉ ์์]
> # df์์ class == 1์ธ ๊ฒ๋ค๋ง ๋ณด๊ฒ ๋ค
> filter(df, class == 1)
# A tibble: 4 ร 5
id class math english science
<dbl> <dbl> <dbl> <dbl> <dbl>
1 1 1 50 98 50
2 2 1 60 97 60
3 3 1 45 86 78
4 4 1 30 98 58
์๋ RStudio `help`์์ ์ค๋ช
ํ๋ filter์ ์ฌ์ฉ๋ชจ์ต
ํ์ง๋ง ์๋์ฒ๋ผ ํ์ดํ๋ฅผ ์ฌ์ฉํ ๋ชจ์ต์
๋ ๋ง์ด ์ฌ์ฉ ํ๋ค๊ณ ํจ
๐ง ๋ฐ์ดํฐ ํ๋ ์ %>% filter(์กฐ๊ฑด)
[์ฌ์ฉ ์์]
> # df์์ %>% filter(class๊ฐ 1์ธ ๊ฒ๋ง)
> df %>% filter(class == 1)
# A tibble: 4 ร 5
id class math english science
<dbl> <dbl> <dbl> <dbl> <dbl>
1 1 1 50 98 50
2 2 1 60 97 60
3 3 1 45 86 78
4 4 1 30 98 58
> or and ๋น๊ต ๋ชจ๋ ๊ฐ๋ฅ
> # 1๋ฐ์ด๋ฉด์ ์ํ์ ์ 50์ด์
> df %>% filter(class == 1 & math >=50)
# A tibble: 2 ร 5
id class math english science
<dbl> <dbl> <dbl> <dbl> <dbl>
1 1 1 50 98 50
2 2 1 60 97 60
># ํ๋์ ์ปฌ๋ผ์์ ์ค๋ณต๋ ์ฌ๋ฌ๊ฐ๋ฅผ ๋ฝ๊ณ ์ถ์๋
># %in% c() ๋ฅผ ์ฌ์ฉํ๊ธฐ๋ ํจ
># ex) 1, 3, 5๋ฐ์ ํด๋นํ๋ฉด ์ถ์ถ
>df %>% filter(class == 1 | class == 3 | class ==5)
>df %>% filter(class %in% c(1, 3, 5))
># ์ ๋๊ฐ๋ ๊ฐ์ ๊ฒฐ๊ณผ ๊ฐ
select() : ์ด ์ถ์ถ๐ select(.data, -)
.data : ์ด๋ค ๋ฐ์ดํฐ ํ๋ ์์ ๋ํ์ฌ
- : ์ด๋ค ์กฐ๊ฑด์ ๊ฑธ ๊ฒ์ธ๊ฐ
[์ฌ์ฉ์์]
> select(df, math)
# A tibble: 20 ร 1
math
<dbl>
1 50
2 60
3 45
4 30
.....
pipe ๋ผ์ธ ์ฌ์ฉ์
๐ง ๋ฐ์ดํฐ ํ๋ ์ %>% select(์ถ์ถํ ์ด)
[์ฌ์ฉ ์์]
> df %>% select(math)
# A tibble: 20 ร 1
math
<dbl>
1 50
2 60
3 45
...
> # ์ฌ๋ฌ๊ฐ ๋ฝ๊ธฐ
> df %>% select(math, english)
# A tibble: 20 ร 2
math english
<dbl> <dbl>
1 50 98
2 60 97
3 45 86
4 30 98
5 25 80
># ํน์ ์ด ์ ์ธ
> df %>% select(-math)
# A tibble: 20 ร 4
id class english science
<dbl> <dbl> <dbl> <dbl>
1 1 1 98 50
2 2 1 97 60
3 3 1 86 78
4 4 1 98 58
5 5 2 80 65
># ํํฐ์ ํจ๊ป ์ฐ๊ธฐ
># filter๋ก ๋จผ์ ๊ฑธ๋ฌ๋ด๊ณ select
># 1๋ฐ์ธ์ ๋ค ์ํ์ฑ์ ๋ณด์ฌ์ฃผ๊ธฐ
> df %>% filter(class == 1) %>% select(math)
# A tibble: 4 ร 1
math
<dbl>
1 50
2 60
3 45
4 30
># 1๋ฐ์ ์ํ์ฑ์ ์ด 50์ธ ์ ๋ค์ ์์ด์ ๊ณผํ ์ด์ ๋ณด์ฌ๋ฌ๋ผ
> df %>% filter(class == 1 & math >= 50) %>% select(english, science)
# A tibble: 2 ร 2
english science
<dbl> <dbl>
1 98 50
2 97 60
๐ง ๋ฐ์ดํฐํ๋ ์ %>% arrange(ํ)
df %>% arrange(math) ---------- ์ค๋ฆ์ฐจ์
df %>% arrange(desc(math)) ---- ๋ด๋ฆผ์ฐจ์
[์ฌ์ฉ์์]
> # ๋ฐ์ด 2,3์ธ๋ฐ ์ํ์ ์๊ฐ 50์ด์์ธ๋ฐ ํ์๋ค์
> # ์์ด์ ๊ณผํ์ ์๋ฅผ
> # ์์ด๋ ์ค๋ฆ์ฐจ์, ๊ณผํ์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํด ๋ณด์ฌ์ฃผ์์ค
> df %>% filter(class == c(2,3) & math >= 50 )%>% arrange(science, desc(math))
# A tibble: 2 ร 5
id class math english science
<dbl> <dbl> <dbl> <dbl> <dbl>
1 7 2 80 90 45
2 10 3 50 98 45
๐ mutate : ์๋ ๊ฐ์ ๋ณํํด์ ์ถ๊ฐํ๊ฒ ๋ค.
(์๋ ๊ฐ ๋ณํ์ด๋ผ ํ์๋ณ์๋ผ๊ณ ๋ ํจ)
๋ฐ์ดํฐํ๋ ์ %>% mutate(์ด์ด๋ฆ = ๋ณํ ๊ฐ)
๋ง์ฝ ์ด ์ด๋ฆ์ ์ง์ ์ํ๋ค๋ฉด '๋ณํ ๊ฐ'์ด ๊ทธ๋๋ก ์ด์ด๋ฆ์ด ๋๋ค.
[์ฌ์ฉ์์]
> # ์ํ์ ์๋ฅผ 10์ ์ฉ ์ฌ๋ ค ์๋ก์ด ์ด๋ก ์ถ๊ฐํ๊ธฐ
> df %>% mutate(tot = math + english + science)
# A tibble: 20 ร 6
id class math english science tot
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 1 50 98 50 198
2 2 1 60 97 60 217
...
># ์ด์ด๋ฆ ์ง์ ์ํด์คฌ์ ๋
> df %>% mutate(math + english + science)
# A tibble: 20 ร 6
id class math english science `math + english + science`
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 1 50 98 50 198
2 2 1 60 97 60 217
...
> # ๋ ๊ฐ์ ์ด์ ๋์์ ๋ง๋ค์ด ์ค ์๋ ์์
> df %>% mutate(tot = math + english + science,
+ mean = (math + english + science)/3)
# A tibble: 20 ร 7
id class math english science tot mean
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 1 50 98 50 198 66
2 2 1 60 97 60 217 72.3
...
># ๋จผ์ ๊ณ์ฐ๋ ๊ฐ์ ๋ค์ ์ฌ์ฉํ ์ ๋ ์์
> df %>% mutate(tot = math + english + science,
+ mean = tot/3)
# A tibble: 20 ร 7
id class math english science tot mean
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 1 50 98 50 198 66
... (์ค๋ฅ์์ด ์คํ๋๋ ๋ชจ์ต)
ifelse(์กฐ๊ฑด, ์ฐธ์ผ๋ ์ถ๋ ฅ์ด, ๊ฑฐ์ง์ผ๋ ์ถ๋ ฅ์ด)
># ๋ง์ฝ ์ํ์ด 50์ ์ด์์ด๋ผ๋ฉด pass, ์๋๋ผ๋ฉด fail ์ด ์ถ๊ฐ
> df %>% mutate(test = ifelse(math >= 50, "Pass", "Fail"))
# A tibble: 20 ร 6
id class math english science test
<dbl> <dbl> <dbl> <dbl> <dbl> <chr>
1 1 1 50 98 50 Pass
2 2 1 60 97 60 Pass
3 3 1 45 86 78 Fail
4 4 1 30 98 58 Fail
5 5 2 25 80 65 Fail
># ์ํ์ ์ ํ๊ท ๋ด๊ธฐ. ์๋ ๋์ ๊ฐ์ ๊ฒฐ๊ณผ
mean(df$math)
df %>% summarise(mathM = mean(math))
># ์๋ก์ด ์นผ๋ผ, ํ๊ท ์ฃผํ์ฐ๋น ์นผ๋ผ์ ๋ง๋ค์ด ์ฃผ์ธ์
library(ggplot2)
mpg <- mpg %>% select(manufacturer, model, displ, year, cty, hwy) %>%
mutate(ํ๊ท ์ฃผํ์ฐ๋น = (cty+hwy)/2) %>% arrange(desc(ํ๊ท ์ฃผํ์ฐ๋น))
group_by
: ~๋ณ ํ๊ท ์ ๊ตฌํ์์ค ์ ๊ฐ์ ์กฐ๊ฑด์ผ๋ ์ฌ์ฉ
: ํน์ ์กฐ๊ฑด์ ๋ง์กฑ์ํค๋ ๊ฐ๋ค์ ๊ทธ๋ฃน์ง์ด ๋ฆฌํดํ๋ ๊ธฐ๋ฅ์ ๊ฐ์ง๋ค
># ์ ์กฐ์ฌ๋ณ ๋์ ์ฃผํ์ฐ๋น์ ํ๊ท ์?
mpg %>% group_by(manufacturer) %>% summarise(์ฐ๋นํ๊ท = mean(cty))
># ์ค์ธ์ฐ๊ธฐ
mpg %>% group_by(manufacturer) %>% summarise(์ฐ๋นํ๊ท = mean(cty)) %>% arrange(์ฐ๋นํ๊ท )
># ์ ์กฐ์ฌ์ ๋ชจ๋ธ ๋ณ ๋์์ฃผํ์ฐ๋น์ ํ๊ท ์ ์ค์ธ์์
mpg %>% group_by(manufacturer, model) %>%
summarise(์ฐ๋นํ๊ท = mean(cty)) %>% arrange(์ฐ๋นํ๊ท )
๐ left_join(๋ฐ์ดํฐํ๋ ์1, ๋ฐ์ดํฐํ๋ ์2, by="๊ธฐ์ค ์ด") : ์ผ์ชฝํ ์ด๋ธ์ ๊ธฐ์ค์ผ๋ก ๊ธฐ์ค์ด(by)์ด ๊ฒน์น๋ ๊ฒ๋ง ์ถ์ถ
# ๋ฐ์ดํฐ ์์ฑ
# ์ค๊ฐ๊ณ ์ฌ
> test3 <- data.frame(id = c(1, 2, 3, 4, 5),
midterm = c(60, 80, 70, 90, 85))
># ๊ธฐ๋ง๊ณ ์ฌ
> test4 <- data.frame(id = c(6, 7, 8, 9, 10),
final = c(70, 83, 65, 95, 80))
> left_join(test3, test4, by = "id")
id midterm final
1 1 60 NA
2 2 80 NA
3 3 70 NA
4 4 90 NA
5 5 85 NA
๐ right_join(๋ฐ์ดํฐํ๋ ์1, ๋ฐ์ดํฐํ๋ ์2, by="๊ธฐ์ค ์ด") : ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ ๊ธฐ์ค์ผ๋ก ๊ธฐ์ค์ด(by)์ด ๊ฒน์น๋ ๊ฒ๋ง ์ถ์ถ
> right_join(test3, test4, by = 'id')
id midterm final
1 6 NA 70
2 7 NA 83
3 8 NA 65
4 9 NA 95
5 10 NA 80
๐ bind_rows(dataframe1, dataframe2)
> all <-bind_rows(test3, test4)
> all
id midterm final
1 1 60 NA
2 2 80 NA
3 3 70 NA
4 4 90 NA
5 5 85 NA
6 6 NA 70
7 7 NA 83
8 8 NA 65
9 9 NA 95
10 10 NA 80
๐ full_join(๋ฐ์ดํฐํ๋ ์1, ๋ฐ์ดํฐํ๋ ์2, by="๊ธฐ์ค ์ด") : ๋ชจ๋ ํ ์ด๋ธ ๊ฐ ์ถ์ถ
># ์ด๋์ด์ ๊ธฐ์ค์ผ๋ก ํ ์ง ์ ํ์ง ์์ผ๋๊น
># ์์์ "id"๋ฅผ ๊ธฐ์ค์ผ๋ก Joining ํด์ค
> full_join(test3, test4)
Joining, by = "id"
id midterm final
1 1 60 NA
2 2 80 NA
3 3 70 NA
4 4 90 NA
5 5 85 NA
6 6 NA 70
7 7 NA 83
8 8 NA 65
9 9 NA 95
10 10 NA 80
๐ inner_join(๋ฐ์ดํฐํ๋ ์1, ๋ฐ์ดํฐํ๋ ์2, by="๊ธฐ์ค ์ด") : ๊ธฐ์ค์ด์ ์ค์ฌ์ผ๋ก ๋ ํ ์ด๋ธ์ ๊ฐ์ด ์กด์ฌํ๋ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถ
> inner_join(test3, test4)
Joining, by = "id"
[1] id midterm final
<0 ํ> <๋๋ row.names์ ๊ธธ์ด๊ฐ 0์
๋๋ค>
># ๊ธฐ์ค์ด์ ๋ช
์ํด์ฃผ์ง ์์ ์์์ id๋ฅผ ๊ธฐ์ค์ด๋ก ์ก์์ง๋ง
># ๊ฒน์น๋ ๋ฐ์ดํฐ๊ฐ ์์ด ๊ฐ์ด ๋์ค์ง ์์
> inner_join(test1, test2)
Joining, by = "id"
id midterm final
1 1 60 70
2 2 80 83
3 3 70 65
4 4 90 95
5 5 85 80
># ๊ธฐ์ค์ด์ธ "id" ๊ฐ ๊ฒน์น๋ ๋ชจ๋ ๊ฐ๋ค์ ๋ณด์ฌ์ค๋ค.
colnames(test1)=c('id',"test")> test1
id midterm
1 1 60
2 2 80
3 3 70
4 4 90
5 5 85
> colnames(test1)=c('id',"test")
> test1
id test
1 1 60
2 2 80
3 3 70
4 4 90
5 5 85
> colnames(test1)[2]= "test"
> test1
id test
1 1 60
2 2 80
3 3 70
4 4 90
5 5 85
rename(๋ฐ์ดํฐํ๋ ์1, ์๋ณ์๋ช
= ๊ธฐ์กด๋ณ์๋ช
)๋ฐ์ดํฐํ๋ ์1 %>% rename(์๋ณ์๋ช
= ๊ธฐ์กด๋ณ์๋ช
)> test1 %>% rename(midterm = te)
id midterm
1 1 60
2 2 80
3 3 70
4 4 90
5 5 85
๋ทฐ์ด ์ฐฝ์์ ๋ฐ์ดํฐ ํ์ธํ๊ธฐ
View(test2)

merge(๋ฐ์ดํฐํ๋ ์1, ๋ฐ์ดํฐํ๋ ์2, by = "๊ธฐ์ค์ถ")> merge(test1, test2, by="id")
id midterm final
1 1 60 70
2 2 80 83
3 3 70 65
4 4 90 95
5 5 85 80
> merge(test3, test4, by="id")
[1] id midterm final
<0 ํ> <๋๋ row.names์ ๊ธธ์ด๊ฐ 0์
๋๋ค>
># ๋ง์ฝ ๊ณตํต๋์ง ์๋ ๋ถ๋ถ๋ ์ด๋ฆฌ๊ณ ์ถ๋ค๋ฉด
># all.์ด๋ฆฌ๊ณ ์ถ์ ์ถ = TRUE
> merge(test3, test4, by="id", all.x = T)
id midterm final
1 1 60 NA
2 2 80 NA
3 3 70 NA
4 4 90 NA
5 5 85 NA
> merge(test3, test4, by="id", all.y = T)
id midterm final
1 6 NA 70
2 7 NA 83
3 8 NA 65
4 9 NA 95
5 10 NA 80
>#๋ชจ๋ ์ด๋ฆฌ๊ณ ์ถ์ผ๋ฉด all = TRUE
> merge(test3, test4, by="id", all = T)
id midterm final
1 1 60 NA
2 2 80 NA
3 3 70 NA
4 4 90 NA
5 5 85 NA
6 6 NA 70
7 7 NA 83
8 8 NA 65
9 9 NA 95
10 10 NA 80