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

作者: ToastCheng (ToastCheng哥)   2015-01-13 18:17:50
[問題類型]:
程式諮詢(我想用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
作者: Edster (Edster)   2015-01-13 18:56:00
試試!is.na(x) & x > 31; na.omit; 並不能賦值成為 NULL;若你真要賦值, 則請用 hw2[i,] <- NA
作者: Carollax (更更)   2015-01-13 19:31:00
complete.case可以把含有NA的資料刪除

Links booklink

Contact Us: admin [ a t ] ucptt.com