2014-10-20 237 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