📝 16번
주어진 데이터에서 2022년 5월 sales컬럼의 중앙값을 구하시오.
💻 풀이
> library(readr)
> library(dplyr)
> basic <- read_csv('basic2.csv')
> head(basic)
> str(basic)
spec_tbl_df [31 x 5] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
$ Date : Date[1:31], format: "2022-05-01" "2022-05-02" "2022-05-03" "2022-05-04" ...
$ Sales : num [1:31] 976303 7394853 813181 318886 43980 ...
$ PV : num [1:31] 45225 262116 23916 4733 47246 ...
$ UV : num [1:31] 1142 2959 358 292 560 ...
$ Events: num [1:31] 0 1 0 0 0 0 1 0 0 0 ..
> result <- (basic %>% filter(year(Date) == 2022 & month(Date) == 05) %>% summarise(median=median(Sales, na.rm=T)))$median
> result
[1] 1477685
📝 17번
주어진 데이터에서 2022년 5월 주말과 평일의 sales컬럼 평균값 차이를 구하시오 (소수점 둘째자리까지 출력, 반올림)
💻 풀이
> library(readr)
> library(dplyr)
> library(lubridate)
> basic <- read_csv('basic2.csv')
> head(basic)
> str(basic)
spec_tbl_df [31 x 5] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
$ Date : Date[1:31], format: "2022-05-01" "2022-05-02" "2022-05-03" "2022-05-04" ...
$ Sales : num [1:31] 976303 7394853 813181 318886 43980 ...
$ PV : num [1:31] 45225 262116 23916 4733 47246 ...
$ UV : num [1:31] 1142 2959 358 292 560 ...
$ Events: num [1:31] 0 1 0 0 0 0 1 0 0 0 ..
> basic <- basic %>% filter(year(Date) == 2022 & month(Date) == 05)
> wday(basic$Date)
[1] 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3
> weekend <- basic %>% filter(wday(Date) %in% c(1, 7)) %>% summarise(mean=mean(Sales))
> weekday <- basic %>% filter(!wday(Date) %in% c(1, 7)) %>% summarise(mean=mean(Sales))
> result <- round(abs(weekend - weekday), 2)
> print(result)
mean
1 3010339
📝 18번
주어진 데이터에서 2022년 월별 Sales 합계 중 가장 큰 금액과
2023년 월별 Sales 합계 중 가장 큰 금액의 차이를 절대값으로 구하시오. 단, Events컬럼이 '1'인 경우 80%의 Salse값만 반영함
(최종값은 소수점 반올림 후 정수 출력)
💻 풀이
> library(readr)
> library(dplyr)
> library(lubridate)
> basic <- read_csv('basic2.csv')
> head(basic)
> str(basic)
> basic$Sales <- ifelse(basic$Events == 1, basic$Sales * 0.8, basic$Sales)
> year2022 <- basic %>% group_by(year(Date), month(Date)) %>% filter(year(Date) == 2022) %>% summarise(sum=sum(Sales))
> max_2022 <- max(year2022$sum)
> max_2022 # 197145878
> year2023 <- basic %>% group_by(year(Date), month(Date)) %>% filter(year(Date) == 2023) %>% summarise(sum=sum(Sales))
> max_2023 <- max(year2023$sum)
> max_2023 # 239619314
> result <- round(abs(max_2022 - max_2023), 2)
> print(result)
[1] 42473436
📝 19번
basic1 데이터 중 'f4'를 기준으로 basic3 데이터 'f4'값을 병합하고, 병합한 데이터에서 r2 결측치를 제거한 다음, 앞에서 부터 20개 데이터를 선택하고 'f2'컬럼 합을 구하시오.
💻 풀이
> library(readr)
> library(dplyr)
> basic1 <- read_csv('basic1.csv')
# A tibble: 6 x 8
id age city f1 f2 f3 f4 f5
<chr> <dbl> <chr> <dbl> <dbl> <chr> <chr> <dbl>
1 id01 2 서울 NA 0 NA ENFJ 91.3
2 id02 9 서울 70 1 NA ENFJ 60.3
3 id03 27 서울 61 1 NA ISTJ 17.3
4 id04 75 서울 NA 2 NA INFP 52.7
5 id05 24 서울 85 2 NA ISFJ 29.3
6 id06 22 서울 57 0 vip INTP 20.1
> basic3 <- read_csv('basic3.csv')
# A tibble: 6 x 3
f4 r1 r2
<chr> <chr> <chr>
1 INFP ENFJ ENTJ
2 ENFP INFJ NA
3 INFJ ENFP ENTP
4 ENFJ INFP ISFP
5 INTJ ENFP ENTP
6 ENTJ INFP NA
> head(basic1)
> head(basic3)
> basic <- left_join(basic1, basic3, by="f4")
> colSums(is.na(basic))
> basic <- head(basic[!is.na(basic$r2), ], 20)
> result <- sum(basic$f2)
> print(result)
[1] 15
📝 20번
basic1 데이터 중 'age'컬럼 이상치를 제거하고, 동일한 개수로 나이 순으로 3그룹으로 나눈 뒤 각 그룹의 중앙값을 더하시오.
(이상치는 음수, 0, 소수점)
💻 풀이
> library(readr)
> library(dplyr)
> library(ggplot2)
> basic <- read_csv('basic1.csv')
> head(basic)
> basic <- basic %>% filter(age > 0 & (age * 10) %% 10 == 0)
> basic <- basic %>% mutate(group=cut_number(age, 3)) %>% group_by(group) %>% summarise(med=median(age))
> result <- sum(basic$med)
> print(result)
[1] 165