2014-10-20 2 views
0

У меня есть data.frame, содержащий значения для WIND_CHILL, DRY_BULB_TEMP и WIND_SPEED. Когда WIND_SPEED <= 5, то я хотел бы установить WIND_CHILL = DRY_ BULB TEMP, потому что на этих скоростях формула для WIND_CHILL не оценивает температуру эффективно. WIND_CHILL - 9-я колонна, DRY_BULB_TEMP 4-я колонна и WIND_SPEED 7-я колонна в data.frame. data.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

ответ

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

Ваши 'WIND_CHILL' и' DRY_BULB_TEMP' должны быть '' WIND_CHILL'' и '" DRY_BULB_TEMP "или' местом $ WIND_CHILL' и 'местом $ DRY_BULB_TEMP' при использовании внутри' места'. Кроме этого, ваш подход выглядит правильно. – nrussell

+0

ooops это и опечатка – phonixor

+0

Спасибо, что сработал –

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 (x2 должно быть 1, если x1 < 3 и x3 должно быть 0, если x1> = 3). Когда я запустил это, вы заметите, что использование инструкции позволяет выборочно перезаписывать значения, поскольку возвращает индексы, которые необходимо перезаписать.

> 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 
Смежные вопросы