[問題] 擷取data.frame中的特定資料

看板R_Language作者 (ToastCheng哥)時間10年前 (2015/01/13 18:17), 編輯推噓3(300)
留言3則, 2人參與, 最新討論串1/2 (看更多)
[問題類型]: 程式諮詢(我想用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

01/13 18:56, , 1F
試試!is.na(x) & x > 31; na.omit; 並不能賦值成為 NULL;
01/13 18:56, 1F

01/13 19:03, , 2F
若你真要賦值, 則請用 hw2[i,] <- NA
01/13 19:03, 2F

01/13 19:31, , 3F
complete.case可以把含有NA的資料刪除
01/13 19:31, 3F
文章代碼(AID): #1KjF3Gsh (R_Language)
文章代碼(AID): #1KjF3Gsh (R_Language)