2014-10-20 22 views
0

我有一個data.frame,其中包含WIND_CHILL,DRY_BULB_TEMPWIND_SPEED的值。 當WIND_SPEED <= 5那麼我想設置WIND_CHILL = DRY_ BULB TEMP,因爲在這些速度下,WIND_CHILL的公式不能有效估計溫度。 WIND_CHILL是第9列,DRY_BULB_TEMP第4列和WIND_SPEED第7列在data.framedata.frame被稱爲venue。我告訴你們這個,所以你可以理解我試過的是:R - 替換數據幀中的值

n <- nrow(venue) 
for(i in 1:n) { 
    if(venue[n,7] <= 5) { 
     venue[n,9] <- venue[n,4] 
    } 
} 

任何想法??

+0

將來請發佈您的數據樣本,以便其他人可以更容易地重現您的錯誤。爲了解決你的問題,你不應該需要一個'for'循環來做到這一點 - 我認爲像'場地[,9] < - ifelse(場地[,7] <= 5,場地[,4],場地[ ,9])'應該可以正常工作。 – nrussell 2014-10-20 14:34:57

回答

1

既然你沒有提供你的data.frame,我不得不這樣做:P。

venue[venue$WIND_SPEED<=5,"WIND_CHILL"]=venue[venue$WIND_SPEED<=5,"DRY_BULB_TEMP"] 

或:

venue[venue$WIND_SPEED<=5,9]=venue[venue$WIND_SPEED<=5,4] 
+0

在'venue'內使用'WIND_CHILL'和'DRY_BULB_TEMP'應該是''WIND_CHILL''和''DRY_BULB_TEMP''或'venue $ WIND_CHILL'和'venue $ DRY_BULB_TEMP'。除此之外,你的方法看起來是正確的。 – nrussell 2014-10-20 14:38:08

+0

ooops和一個錯字 – phonixor 2014-10-20 14:47:51

+0

謝謝你的工作 – 2014-10-20 14:57:55

0

所以,我沒有訪問您的數據集,所以我不得不拿出一個簡單的例子。

x1<-rnorm(100,mean=0,sd=10) 
x2<-rep(0,100) 
x3<-rep(1,100) 

df<-data.frame(x1,x2,x3) 

summary(df$x2) 

#overwrite x2 for values of x1 less than 3 
df$x2[ which(df$x1 < 3) ] <- 1 

summary(df$x2) 

summary(df$x3) 
#overwrite x3 for values of x1 >= 3 
df$x3[ which(df$x1 >= 3) ] <- 0 

summary(df$x3) 

您會注意到我們有一個包含3個變量的數據框。 x1是一個隨機變量,x2和x3是x1的名義化(如果x1> = 3,則x2應該爲1,如果x1爲< 3且x3應該爲0)。當我運行這個時,你會注意到使用哪個語句有助於有選擇地覆蓋值,因爲它返回了需要被覆蓋的索引。

> x1<-rnorm(100,mean=0,sd=10) 
> x2<-rep(0,100) 
> x3<-rep(1,100) 
> 
> df<-data.frame(x1,x2,x3) 
> 
> summary(df$x2) 
    Min. 1st Qu. Median Mean 3rd Qu. Max. 
     0  0  0  0  0  0 
> 
> #overwrite x2 for values of x1 less than 3 
> df$x2[ which(df$x1 < 3) ] <- 1 
> 
> summary(df$x2) 
    Min. 1st Qu. Median Mean 3rd Qu. Max. 
    0.00 0.00 1.00 0.58 1.00 1.00 
> 
> summary(df$x3) 
    Min. 1st Qu. Median Mean 3rd Qu. Max. 
     1  1  1  1  1  1 
> #overwrite x3 for values of x1 >= 3 
> df$x3[ which(df$x1 >= 3) ] <- 1 
> 
> summary(df$x3) 
    Min. 1st Qu. Median Mean 3rd Qu. Max. 
     1  1  1  1  1  1 
> x1<-rnorm(100,mean=0,sd=10) 
> x2<-rep(0,100) 
> x3<-rep(1,100) 
> 
> df<-data.frame(x1,x2,x3) 
> 
> summary(df$x2) 
    Min. 1st Qu. Median Mean 3rd Qu. Max. 
     0  0  0  0  0  0 
> 
> #overwrite x2 for values of x1 less than 3 
> df$x2[ which(df$x1 < 3) ] <- 1 
> 
> summary(df$x2) 
    Min. 1st Qu. Median Mean 3rd Qu. Max. 
    0.00 0.00 1.00 0.63 1.00 1.00 
> 
> summary(df$x3) 
    Min. 1st Qu. Median Mean 3rd Qu. Max. 
     1  1  1  1  1  1 
> #overwrite x3 for values of x1 >= 3 
> df$x3[ which(df$x1 >= 3) ] <- 0 
> 
> summary(df$x3) 
    Min. 1st Qu. Median Mean 3rd Qu. Max. 
    0.00 0.00 1.00 0.63 1.00 1.00