성적표 정형화 작업
id <- c(1:10)
id
class <- c(1,1,1,1,1,2,2,2,2,2)
class
math <- c(50,60,45,30,25,50,30,25,50,50)
math
eng <- c(98,97,86,98,80,89,70,72,75,80)
eng
sci <- c(50,60,78,58,65,98,60,67,75,90)
sci
df.score <- data.frame(id, class, math, eng, sci)
df.score
# 전체 학생 점수 보기
df.score
# n번째 row 까지만 보여주기 head(df, n)
head(df.score, 8)
# 밑에서 n번째 row 까지만 보여주기 tail(df, n)
tail(df.score, 8)
# 뷰어창에서 df ghkrdls View(df) ※ View의 V는 대문자
View(df.score)
# df, row count, col count
dim(df.score)
# str() structure를 나타내는 함수 / 변수들의 속성
str(df.score)
# summary() 요약 통계량 산출
summary(df.score)
library(dplyr)
library(data.table)
# df.score <- dplyr::rename(df.score, id='아이디')
df.score %>% #ctrl+shift+m: 파이프라인(연산자)
data.table :: setnames(
old = "id",
new = "아이디"
)
df.score
df.score$total <- df.score$math+df.score$eng+df.score$sci
df.score
df.score$mean <- df.score$total/3
df.score
df.score %>%
data.table :: setnames(
old = "total",
new = "합계"
)
### histogram 작성
hist(df.score$합계)
# ifelse()
df.score$test <- ifelse(df.score$mean >70,"pass","fail")
df.score
### 빈도표 작성
table(df.score$test)
### ggplot2 내 qplot 사용하여 빈도수 표 그리기
library(ggplot2)
ggplot2 :: qplot(df.score$test)
### 중첩 조건문
df.score$grade <- ifelse(df.score$mean >= 70,
"A",
ifelse(df.score$mean >= 60, "B","C"))
table(df.score$grade)
library(ggplot2)
ggplot2 :: qplot(df.score$grade)
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0K7ISx7KCB7ZGcIOygle2Yle2ZlCDsnpHsl4UNCg0KDQpgYGB7cn0NCmlkIDwtIGMoMToxMCkNCmlkDQpjbGFzcyA8LSBjKDEsMSwxLDEsMSwyLDIsMiwyLDIpDQpjbGFzcw0KbWF0aCA8LSBjKDUwLDYwLDQ1LDMwLDI1LDUwLDMwLDI1LDUwLDUwKQ0KbWF0aA0KZW5nIDwtIGMoOTgsOTcsODYsOTgsODAsODksNzAsNzIsNzUsODApDQplbmcNCnNjaSA8LSBjKDUwLDYwLDc4LDU4LDY1LDk4LDYwLDY3LDc1LDkwKQ0Kc2NpDQpkZi5zY29yZSA8LSBkYXRhLmZyYW1lKGlkLCBjbGFzcywgbWF0aCwgZW5nLCBzY2kpDQpkZi5zY29yZQ0KDQojIOyghOyytCDtlZnsg50g7KCQ7IiYIOuztOq4sA0KZGYuc2NvcmUNCiMgbuuyiOynuCByb3cg6rmM7KeA66eMIOuztOyXrOyjvOq4sCBoZWFkKGRmLCBuKQ0KaGVhZChkZi5zY29yZSwgOCkNCg0KIyDrsJHsl5DshJwgbuuyiOynuCByb3cg6rmM7KeA66eMIOuztOyXrOyjvOq4sCB0YWlsKGRmLCBuKQ0KdGFpbChkZi5zY29yZSwgOCkNCg0KIyDrt7DslrTssL3sl5DshJwgZGYgZ2hrcmRscyBWaWV3KGRmKSDigLsgVmlld+ydmCAgVuuKlCDrjIDrrLjsnpANClZpZXcoZGYuc2NvcmUpDQoNCiMgZGYsIHJvdyBjb3VudCwgY29sIGNvdW50DQpkaW0oZGYuc2NvcmUpDQoNCiMgc3RyKCkgc3RydWN0dXJl66W8IOuCmO2DgOuCtOuKlCDtlajsiJggLyDrs4DsiJjrk6TsnZgg7IaN7ISxDQpzdHIoZGYuc2NvcmUpDQoNCiMgc3VtbWFyeSgpIOyalOyVvSDthrXqs4Trn4kg7IKw7LacDQpzdW1tYXJ5KGRmLnNjb3JlKQ0KDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShkYXRhLnRhYmxlKQ0KICAjIGRmLnNjb3JlIDwtIGRwbHlyOjpyZW5hbWUoZGYuc2NvcmUsIGlkPSfslYTsnbTrlJQnKSANCiAgZGYuc2NvcmUgJT4lICAjY3RybCtzaGlmdCttOiDtjIzsnbTtlITrnbzsnbgo7Jew7IKw7J6QKQ0KICAgIGRhdGEudGFibGUgOjogc2V0bmFtZXMoDQogICAgICAgICAgb2xkID0gImlkIiwNCiAgICAgICAgICBuZXcgPSAi7JWE7J2065SUIg0KICAgICkNCiAgZGYuc2NvcmUNCmRmLnNjb3JlJHRvdGFsIDwtIGRmLnNjb3JlJG1hdGgrZGYuc2NvcmUkZW5nK2RmLnNjb3JlJHNjaQ0KZGYuc2NvcmUgIA0KICANCmRmLnNjb3JlJG1lYW4gPC0gZGYuc2NvcmUkdG90YWwvMyAgDQpkZi5zY29yZQ0KDQpkZi5zY29yZSAlPiUgDQogIGRhdGEudGFibGUgOjogc2V0bmFtZXMoDQogICAgb2xkID0gInRvdGFsIiwNCiAgICBuZXcgPSAi7ZWp6rOEIg0KICApDQoNCiMjIyBoaXN0b2dyYW0g7J6R7ISxDQpoaXN0KGRmLnNjb3JlJO2VqeqzhCkNCiMgaWZlbHNlKCkNCmRmLnNjb3JlJHRlc3QgPC0gaWZlbHNlKGRmLnNjb3JlJG1lYW4gPjcwLCJwYXNzIiwiZmFpbCIpDQpkZi5zY29yZQ0KDQojIyMg67mI64+E7ZGcIOyekeyEsQ0KdGFibGUoZGYuc2NvcmUkdGVzdCkNCg0KIyMjIGdncGxvdDIg64K0IHFwbG90IOyCrOyaqe2VmOyXrCDruYjrj4TsiJgg7ZGcIOq3uOumrOq4sA0KbGlicmFyeShnZ3Bsb3QyKQ0KZ2dwbG90MiA6OiBxcGxvdChkZi5zY29yZSR0ZXN0KQ0KDQojIyMg7KSR7LKpIOyhsOqxtOusuA0KZGYuc2NvcmUkZ3JhZGUgPC0gaWZlbHNlKGRmLnNjb3JlJG1lYW4gPj0gNzAsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICJBIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGRmLnNjb3JlJG1lYW4gPj0gNjAsICJCIiwiQyIpKQ0KdGFibGUoZGYuc2NvcmUkZ3JhZGUpDQoNCmxpYnJhcnkoZ2dwbG90MikNCmdncGxvdDIgOjogcXBsb3QoZGYuc2NvcmUkZ3JhZGUpDQoNCg0KYGBgDQoNCg==