Re: [問題] for迴圈不會寫

看板R_Language作者 (討厭有好心推文後刪文者)時間8年前 (2017/03/21 23:30), 編輯推噓0(005)
留言5則, 2人參與, 最新討論串2/2 (看更多)
這用 tapply 就可以直接解,像這樣: tapply(iris$Petal.Length, iris$Species, mean) 不過如果是要練習 for loop, 以下給一個初學者容易理解的解法。 # 初始化一個 list,並給名字。 ans <- vector("list", length(levels(iris$Species))) names(ans) <- levels(iris$Species) # 利用 names(ans) 來當 for loop 裡的變數 for(i in names(ans)){ which.row <- which(iris$Species == i) ans[[i]] <- mean(iris$Petal.Length[which.row]) } # 結果如下 print(ans) ※ 引述《anyonred (任意紅)》之銘言: : 題目是 : # 請計算Petal.Length在三種Species的平均值 : # 請將三種結果分別存到一個named list之中 : # list elements 的名稱對應到類別,包含的值則代表對應的Species在Petal.Length的 : 平均值 : # 可以參考後面`stopifnot`的提示 : answer2 <- local({ : for name in names(iris$Species){iris$Species(name)<-mean(Petal.length(name)) : }) : (上面這段是我自己寫的,但我不清楚我錯在哪裡,希望有人可以跟我說下) : stopifnot(is.list(answer2)) : stopifnot(length(answer2) == 3) : stopifnot(names(answer2) == c("setosa", "versicolor", "virginica")) : local({ : for(name in unique(iris$Species)) { : stopifnot(is.numeric(answer2[[name]])) : stopifnot(length(answer2[[name]]) == 1) : } : }) : 其實stopifnot我看沒有懂,我初學dataframe一段時間 ,希望有人可以教我寫這題 : 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.135.110.74 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1490110256.A.AE7.html

03/22 06:40, , 1F
感謝andraw大介紹!想藉機請問tapply是不是相當於dplyr的gr
03/22 06:40, 1F

03/22 06:40, , 2F
oup_by+summarise?只不過一個是回傳list一個是dataframe?
03/22 06:40, 2F

03/22 15:38, , 3F
是相似的功能,視個人習慣或時機使用。
03/22 15:38, 3F

03/22 17:58, , 4F
感謝andrew大大,平常自己都習慣把資料整理成dataframe甚少
03/22 17:58, 4F

03/22 18:00, , 5F
使用list,所以對tapply不是很熟(抱歉早上剛睡醒拼錯名字QQ)
03/22 18:00, 5F
文章代碼(AID): #1OqKSmhd (R_Language)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1OqKSmhd (R_Language)