Использование ifelse() с интервалом в качестве условного выражения в R

#r #if-statement

#r #оператор if

Вопрос:

Мой набор данных выглядит следующим образом:

 > head(GLM_df)
# A tibble: 6 x 9
# Groups:   hour [6]
   hour Feeding Foraging Standing ID    Area     Feeding_Foraging Feeding_Standing Standing_Foraging
  <int>   <dbl>    <dbl>    <dbl> <chr> <chr>               <dbl>            <dbl>             <dbl>
1     0    3.5      23.3     1    41361 Seronera             26.8             4.5               24.3
2     1    2.71     24.2     1    41361 Seronera             26.9             3.71              25.2
3     2    2.5      24.3     2    41361 Seronera             26.8             4.5               26.3
4     3    6.88     18.7     3.89 41361 Seronera             25.5            10.8               22.6
5     4    7.5      17.6     3.67 41361 Seronera             25.1            11.2               21.3
6     5    7.22     19.6     2.45 41361 Seronera             26.8             9.67              22.1
 

И я просто хотел бы добавить столбец Day_Night , который будет иметь Day промежуточное значение GLM_df$hour 6 и 18 или будет иметь Night иное значение.

Я попытался использовать приведенное ниже выражение, но получаю следующую ошибку:

 > GLM_df$Day_Night<-ifelse(GLM_df$hour==(6:18),Day,Night)
Error in ifelse(GLM_df$hour == (6:18), Day, Night) : 
  object 'Day' not found
In addition: Warning message:
In GLM_df$hour == (6:18) :
  longer object length is not a multiple of shorter object length
 

Любая помощь приветствуется!

Комментарии:

1. GLM_df$Day_Night<-ifelse(GLM_df$hour %in% c(6:18), "Day", "Night")

Ответ №1:

Попробуйте использовать findInterval() :

 GLM_df$Day_Night <- ifelse(findInterval(GLM_df$hour, c(6, 18),
                           rightmost.closed=TRUE) == 1L, 'Day', 'Night')
 

Ответ №2:

просто:

 library(tidyverse)
data %>% mutate(day_night = ifelse( hour %in% 6:18, "day", "night"))
 

Или:

 data$day_night <- ifelse( data$hour %in% 6:18, "day", "night")
 

Ответ №3:

Использование data.table :

 GLM_df <- as.data.table(GLM_df)
GLM_df[hour %in% c(6:18), Day_Night:="Day"]
GLM_df[!hour %in% c(6:18), Day_Night:="Night"]