看板 R_Language 關於我們 聯絡資訊
這用 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
locka: 感謝andraw大介紹!想藉機請問tapply是不是相當於dplyr的gr 03/22 06:40
locka: oup_by+summarise?只不過一個是回傳list一個是dataframe? 03/22 06:40
andrew43: 是相似的功能,視個人習慣或時機使用。 03/22 15:38
locka: 感謝andrew大大,平常自己都習慣把資料整理成dataframe甚少 03/22 17:58
locka: 使用list,所以對tapply不是很熟(抱歉早上剛睡醒拼錯名字QQ) 03/22 18:00