看板 R_Language 關於我們 聯絡資訊
[問題類型]: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) [軟體熟悉度]: 新手(沒寫過程式,R 是我的第一次) [問題敘述]: 各位大大好,小弟在做coursera的作業時有一題要求把 一個給定的data.frame(叫做airquality)中某兩個向 量(Ozone和Temp)分別大於31和90時的第三個向量Solar.R 的平均值是多少? 後來我有發現可以用: attach(data) sub <- subset(data,Ozone > 31 & Temp > 90) summary(sub) 的方式求出Solar.R在符合上述兩個條件之下的平均值。 但一開始只是直覺地想要用for loop暴力算,但沒成功, 想問板上是否可以用迴圈的方式算出來?以下是自己嘗試 的程式碼,附帶一提: data[,1]是Ozone data[,2]是Solar.R data[,4]是Temp [程式範例]: add <- 0 count <- 0 for(i in 1:153){ if(data[i,1]>31 & data[i,4]>90) add <- add + data[i,2] #把符合條件的Temp值累加 count <- count + 1 } mean <- add/count 這裏遇到的問題是data[,1]含有NA值,所以我想把有NA值 的資料刪掉,於是先跑這個for loop: for(i in 1:153){ if(is.na(hw2[i,1])) hw2[i,] <- NULL } 結果: 錯誤在`[<-.data.frame`(`*tmp*`, i, , value = NULL) : replacement has 0 items, need 6 不知道是類型不一樣,NULL不能隨便套用還是其他原因, 總之先感謝各位大大把這篇看完QQ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.224.80.95 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1421144272.A.DAB.html
Edster: 試試!is.na(x) & x > 31; na.omit; 並不能賦值成為 NULL; 01/13 18:56
Edster: 若你真要賦值, 則請用 hw2[i,] <- NA 01/13 19:03
Carollax: complete.case可以把含有NA的資料刪除 01/13 19:31