"объект 'я' не найден" цикл for - PullRequest
0 голосов
/ 19 февраля 2020

Я пытаюсь сделать простое для l oop, которое добавило бы новый столбец к существующему фрейму данных, назначив временной класс каждому наблюдению. Я получаю «объект», я «не найден» и не уверен, где ошибка. Я не настолько опытен с R, поэтому спасибо за любую помощь!

for (i in 1:nrow(my.data)) {
    if(my.data$RTime[i] <= 3600){
        my.data$RTimeHour[i] <- 1
    }ifelse (my.data$RTime[i] > 3601 & my.data$RTime[i] < 7200){
        my.data$RTimeHour[i] <- 2
    }esle {
        my.data$RTimeHour[i] <- 3
    }
}

Ответы [ 3 ]

0 голосов
/ 20 февраля 2020

Ошибка, вероятно, исходит от ifelse (), который у вас есть:

for (i in 1:nrow(my.data)) {
    if(my.data$RTime[i] <= 3600){
        my.data$RTimeHour[i] <- 1
    }ifelse (my.data$RTime[i] > 3601 & my.data$RTime[i] < 7200){
        my.data$RTimeHour[i] <- 2
    }esle {
        my.data$RTimeHour[i] <- 3
    }
}

Попробуйте вместо этого:

    if(my.data$RTime[i] <= 3600){
        my.data$RTimeHour[i] <- 1
    }else if(my.data$RTime[i] > 3601 & my.data$RTime[i] < 7200){
        my.data$RTimeHour[i] <- 2
    }else {
        my.data$RTimeHour[i] <- 3
    }
}

ifelse vectorizes how the problem, so ifelse(x[i]) will try to refer to something outside of the loop.
0 голосов
/ 20 февраля 2020

Векторизация с tidyverse мы можем просто сделать:

library(tidyverse)

my.data %>% mutate(RTimeHour = case_when(
    RTime <= 3600 ~ 1,
    RTime < 7200 ~ 2,
    TRUE ~ 3)
)
0 голосов
/ 19 февраля 2020

Я думаю, вы можете просто использовать вложенное выражение ifelse:

my.data$RTimeHour <- ifelse(my.data$RTime <= 3600, 1,
                            ifelse(my.data$RTime > 3600 & my.data$RTime <= 7200, 2, 3))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...