2020年9月6日 星期日

12_R的多重判斷式_以期中考題目為例

 在第一階段結束前我覺得不免俗的介紹所程式都有的判斷式也就是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)。

題解:該題為一題組內含四小題,是一題頗具震撼力的一題,考的是學生的膽識及實力,第一次看到時也被該題嚇到,但仔細看也沒那麼難。

解題流程首先題組的內容相關變數設定(考的是膽識)如下

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)

沒有留言:

張貼留言

無現金支付的反思!

  **購物經歷** - 作者花費大量時間尋找立燈,最終在IKEA購買了一個649元的立燈 - 在IKEA附近停車場遇到只接受無現金支付的情況,被迫註冊並使用Line Pay **無現金支付的觀察** - 作者認為Line Pay作為前端介面,有助於提高停車場付費效率 - 作者預...