今天本來要開始進行店商網站的消費分析,但我覺得不免俗的介紹所程式都有的判斷式,也就是if else,當然R也有,而寫這一篇是我個人覺得,判斷式有時在我們在作資料探索時有時是需要用到的,所以在上個月看到一位邦友,提出的問題時間約在四月我想這應該是期中考的問題,當我回答時已經八月放暑假了,應該沒有解決到他的問題,但是我看題目很有啟發性就試著解題,順便帶到R的判斷式,若是各位同好有更好的解答,也歡迎留言!
一、請模擬連續投擲一枚公正的銅板,請問在你的模擬中,投擲幾次才會至少出現三次正面且五次反面
題解:這一題我個人覺得出題老師怕同學互抄但題目很簡單,程式如下
set.seed(8)
sample(1:2,8,replace = TRUE)
我做完是六次,但因亂數每次都會不一樣,所以才說該題為防止程式碼互抄的設計。
二、請產生自動評分器,隨機抽樣一個介於0至100之間的數字,若出現0至59分,則R輸出"Fail",60至69分為"Fair",70至79分為"Good",80分以上為"Excellent"。
題解:該題為很傳統考多重判斷式的題目
x <- sample(0:100,1,replace = TRUE)
if (x<=59){
message("Fail");
} else if (x %in% c(60:69) ){
message("Fair");
} else if (x %in% c(70:79) ){
message("Good");
} else if (x >80) {
message("Excellent");
}
三、**請以下列語法產生30位同學的四次考試成績 **id <- 1:30 exam1 <- sample(40:90, size = 30, replace = T) exam2 <- sample(40:90, size = 30, replace = T) exam3 <- sample(40:90, size = 30, replace = T) exam4 <- sample(40:90, size = 30, replace = T)
(1) 計算每位同學的四次考試平均分數,並存進mean向量中。
(2) 計算mean之平均數、標準差、最大值、最小值
(3) 判斷每位同學的平均成績是否及格,60分以上及格(1)、未滿60分不及格(0),並將結果存進pass向量中。(Hint: 可利用if與for迴圈)
(4) 將id, 四次考試成績, mean, pass等變項存成score資料框(data frame)。
題解:該題為一題組內含四小題,是一題頗具震撼力的一題,考的是學生的膽識及實力,第一次看到時也被該題嚇到,但仔細看也沒那麼難。
解題流程首先題組的內容相關變數設定,若被題目給混淆下面4小題也可不用做了,如下
id <- 1:30
exam1 <- sample(40:90, size = 30, replace = T)
exam2 <- sample(40:90, size = 30, replace = T)
exam3 <- sample(40:90, size = 30, replace = T)
exam4 <- sample(40:90, size = 30, replace = T)
接著進入題組的每一小題
1.計算每位同學的四次考試平均分數,並存進mean向量中。
merage <- cbind(id,exam1,exam2,exam3,exam4)
mean <- rowMeans(merage)
2.計算mean之平均數、標準差、最大值、最小值
summary(mean)
sd(mean)
3. 判斷每位同學的平均成績是否及格,60分以上及格(1)、未滿60分不及格(0),並將結果存進pass向量中。(Hint: 可利用if與for迴圈)
這位老師提醒考生可用for迴圈,但我覺得要寫太多程式碼了,只需一行即可解決
pass <- ifelse(mean>=60,"1","0")
4.將id, 四次考試成績, mean, pass等變項存成score資料框(data frame)。
score <- data.frame(id,exam1,exam2,exam3,exam4,mean,pass)
四個小題組合完成第三題的成果