将if_else应用于时间和日期时出错

时间:2019-03-13 11:17:42

标签: r if-statement

下面是我的数据集示例,其中有GPS位置(LatitudeLongitude)以及它们的注册日期和时间:

> head(datanet)
   Date & Time [Local]  Latitude Longitude
1:    18/06/2018 03:01 -2.434901  34.85359
2:    18/06/2018 03:06 -2.434598  34.85387
3:    18/06/2018 03:08 -2.434726  34.85382
4:    18/06/2018 03:12 -2.434816  34.85371
5:    18/06/2018 03:16 -2.434613  34.85372
6:    18/06/2018 03:20 -2.434511  34.85376

我想创建一列split,该列将查看每一行并显示Night(如果第一列中的时间在[18h00:06h00]和{{1}之间) },如果第一列中的时间是[06h00:18h00]。尽管我是一个初学者,但在这里我如何处理这个问题:

Day

我在正确的轨道上,如何解决此错误?

任何输入都值得赞赏

2 个答案:

答案 0 :(得分:3)

“ DateTime”列位于datanet数据集中,因此我们需要$

datanet$split<- if_else((hour(datane$DateTime) >= 6) &
                      (hour(datanet$DateTime) < 18), "Day", "Night")

或使用with

datanet$split <- with(datenet, if_else((hour(DateTime) >= 6) &
                     (hour(DateTime) < 18), "Day", "Night"))

此外,考虑到原始数据为data.table,语法应为

library(data.table)
datanet[, split := if_else((hour(DateTime) >= 6) &
                     (hour(DateTime) < 18), "Day", "Night")]

或者不使用任何if_else

datanet[, split := c("Night", "Day")[1 + ((hour(DateTime) >= 6) &
                      (hour(DateTime) < 18))]]

答案 1 :(得分:1)

鉴于您的Local列是文本,您应该能够与时间文字进行比较:

datanet$split <- ifelse(datanet$Local >= '18:00' | datanet$Local <= '06:00',
    'Night', 'Day')