📝 21번
주어진 데이터(basic2.csv)에서 주 단위 Sales의 합계를 구하고, 가장 큰 값을 가진 주와 작은 값을 가진 주의 차이를 구하시오(절대값)
💻 풀이
> library(readr)
> library(dplyr)
> library(lubridate)
> basic <- read_csv('basic2.csv')
> head(basic)
> str(basic)
> basic <- basic %>% group_by(week(Date)) %>% summarise(sum=sum(Sales))
> week_max <- max(basic$sum)
> week_min <- min(basic$sum)
> result <- abs(week_max - week_min)
> print(result)
[1] 146559579
📝 22번
f1의 결측치를 채운 후 age 컬럼의 중복 제거 전과 후의 중앙값을 구하시오.
- 결측치는 f1의 데이터 중 10번째 큰 값으로 채움
- 중복 데이터 발생시 뒤에 나오는 데이터를 삭제함
- 최종 결과값은 절대값으로 출력
💻 풀이
> library(readr)
> library(dplyr)
> basic <- read_csv('basic1.csv')
> df <- basic %>% arrange(desc(f1))
> f1 <- df[10, ]$f1
> basic$f1 <- ifelse(is.na(basic$f1), f1, basic$f1)
> before_age <- median(basic$f1)
> before_age # 77.5
> basic[duplicated(basic$age), ]['f1'] <- NA
> after_age <- median(basic$f1, na.rm=T)
> after_age # 77
> result <- abs(before_age - after_age)
> print(result)
[1] 0.5
📝 23번
데이터에서 IQR을 활용해 'Fare'컬럼의 이상치를 찾고, 이상치 데이터의 여성 수를 구하시오.
💻 풀이
> library(readr)
> library(dplyr)
> titanic <- read_csv('train.csv')
> head(titanic)
> Q1 <- quantile(titanic$Fare, 0.25)
> Q3 <- quantile(titanic$Fare, 0.75)
> IQR <- Q3 - Q1
> outlier <- titanic %>% filter((titanic$Fare > Q1 - 1.5 * IQR) & (Q3 + 1.5 * IQR < titanic$Fare))
> result <- outlier %>% filter(outlier$Sex == "female") %>% summarise(n=n())
> print(result$n)
[1] 70
📝 24번
city와 f4를 기준으로 f5의 평균값을 구한 다음, f5를 기준으로 상위 7개 값을 모두 더해 출력하시오 (소수점 둘째자리까지 출력)
💻 풀이
> library(dplyr)
> library(readr)
> basic <- read_csv('basic1.csv')
> head(basic)
> colSums(is.na(basic))
> basic <- basic %>% group_by(city, f4) %>% summarise(f5_mean=mean(f5)) %>% arrange(desc(f5_mean)) %>% head(7)
> result <- round(sum(basic$f5_mean), 2)
> print(result)
[1] 643.68
📝 25번
주어진 데이터(basic2.csv)에서 새로운 컬럼(1일 이전 시차 컬럼)을 만들고, Events가 1이면서 Sales가 1000000이하인 조건에 맞는 새로운 컬럼 합을 구하시오.
💻 풀이
> library(readr)
> library(dplyr)
> library(data.table)
> basic <- read_csv('basic2.csv')
> head(basic)
> basic['lag'] <- shift(basic$PV, 1)
> result <- basic %>% filter(Events == 1 & Sales <= 1000000) %>% summarise(sum=sum(lag))
> print(result)
# A tibble: 1 x 1
value
<dbl>
1 1894876