Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R使用chron软件包编程-查找值是否介于两次之间_R_Chron - Fatal编程技术网

R使用chron软件包编程-查找值是否介于两次之间

R使用chron软件包编程-查找值是否介于两次之间,r,chron,R,Chron,我尝试在数据框“df.data”中创建一个名为“Day_period”的新列,该列采用以下值: “清晨”,如果“时间”列的值介于“05:00:00”和“08:59:00”之间,则使用“chron”包: require(chron) 早起这里有一个方法。鉴于OP的评论,在这里使用cut似乎是一种很好的方法。由于没有可复制的示例,我创建了一个小样本来演示该功能。由于您有一个很大的数据集,我认为您需要更新R并使用data.table包。如果您坚持使用旧版本的R,那么转换方法将是您的选择 # Creat

我尝试在数据框“df.data”中创建一个名为“Day_period”的新列,该列采用以下值: “清晨”,如果“时间”列的值介于“05:00:00”和“08:59:00”之间,则使用“chron”包:

require(chron)

早起这里有一个方法。鉴于OP的评论,在这里使用
cut
似乎是一种很好的方法。由于没有可复制的示例,我创建了一个小样本来演示该功能。由于您有一个很大的数据集,我认为您需要更新R并使用
data.table
包。如果您坚持使用旧版本的R,那么
转换方法将是您的选择

# Create a sample data
mydf <- data.frame(id = 1:7,
                   time = c("01:00:00", "05:30:00", "10:00:00",
                            "14:00:00", "17:00:00", "20:00:00", "23:00:00"),
                   stringsAsFactors = FALSE)

#  id     time
#1  1 01:00:00
#2  2 05:30:00
#3  3 10:00:00
#4  4 14:00:00
#5  5 17:00:00
#6  6 20:00:00
#7  7 23:00:00

library(chron)
library(dplyr)
library(data.table)

# Convert character to times
mydf$time <- times(mydf$time)

# Base R approach
transform(mydf,
          day_period = cut(time,
                       breaks = times(c("00:00:00", "05:00:00", "09:00:00",
                                        "13:00:00", "17:00:00", "21:00:00", "23:59:00")),
                       labels = c("Late night", "Early morning", "Late morning",
                                  "Early afternoon", "Late afternoon", "Evening")))
# dplyr approach
mutate(mydf,
       day_period = cut(time,
                        breaks = times(c("00:00:00", "05:00:00", "09:00:00",
                                         "13:00:00", "17:00:00", "21:00:00", "23:59:00")),
                        labels = c("Late night", "Early morning", "Late morning",
                                   "Early afternoon", "Late afternoon", "Evening")))

# data.table approach
setDT(mydf)[, day_period := cut(time,
                                breaks = times(c("00:00:00", "05:00:00", "09:00:00",
                                                 "13:00:00", "17:00:00", "21:00:00",
                                                 "23:59:00")),
                                labels = c("Late night", "Early morning", "Late morning",
                                           "Early afternoon", "Late afternoon", "Evening"))][]

#   id     time      day_period
#1:  1 01:00:00      Late night
#2:  2 05:30:00   Early morning
#3:  3 10:00:00    Late morning
#4:  4 14:00:00 Early afternoon
#5:  5 17:00:00 Early afternoon
#6:  6 20:00:00  Late afternoon
#7:  7 23:00:00         Evening
#创建一个示例数据

mydf忘记提到df.data$Times列中的值已经是一个Times()对象这是不可复制的,因为没有提供
df.data
。如果DF是仍然存在问题的一小部分行,那么在您的问题中显示
dput(DF)
的结果。我认为您不希望在向量子集中使用
&&
,因为它只返回一个值,TRUE或FALSE。Thnanks!!事实上,我没有提到我有一个数据框架,其中包含4年来每天每分钟的测量数据。。。我想添加一个列,其中的值对应于日周期…(对此我非常抱歉)…即,如果一行的时间介于“05:00:00”和“08:59:00”之间,则日周期列具有“清晨”值,如果它介于“09:00:00”和“12:59:00”之间,则具有“深夜”值值等@jazzurro我在
作为\u数据\u帧
时遇到一些错误<代码>错误:找不到函数“作为数据帧”
。我使用的是
dplyr\u 0.3
,但不久前安装了devel版本。您最近安装了吗?我无法安装dplyr软件包,因为我使用的是R版本3.0.2,它不可用。相反,我使用plyr软件包。我已经有了一个数据框,所以我没有使用as_data_frame函数。@Perukas谢谢你的评论。请添加下一次实际数据的小版本,好吗?这样,你就可以得到正确的答案。这也将有助于用户提供好的建议。因为您有一个大的数据集,所以最好更新您的R并使用
data.table
包。我将很快更新我的建议。@akrun很抱歉,我没有提到该函数在开发版本中可用。我想我上个月更新了dplyr。此函数是新函数之一。这比常规的
data.frame()
要快。
# Create a sample data
mydf <- data.frame(id = 1:7,
                   time = c("01:00:00", "05:30:00", "10:00:00",
                            "14:00:00", "17:00:00", "20:00:00", "23:00:00"),
                   stringsAsFactors = FALSE)

#  id     time
#1  1 01:00:00
#2  2 05:30:00
#3  3 10:00:00
#4  4 14:00:00
#5  5 17:00:00
#6  6 20:00:00
#7  7 23:00:00

library(chron)
library(dplyr)
library(data.table)

# Convert character to times
mydf$time <- times(mydf$time)

# Base R approach
transform(mydf,
          day_period = cut(time,
                       breaks = times(c("00:00:00", "05:00:00", "09:00:00",
                                        "13:00:00", "17:00:00", "21:00:00", "23:59:00")),
                       labels = c("Late night", "Early morning", "Late morning",
                                  "Early afternoon", "Late afternoon", "Evening")))
# dplyr approach
mutate(mydf,
       day_period = cut(time,
                        breaks = times(c("00:00:00", "05:00:00", "09:00:00",
                                         "13:00:00", "17:00:00", "21:00:00", "23:59:00")),
                        labels = c("Late night", "Early morning", "Late morning",
                                   "Early afternoon", "Late afternoon", "Evening")))

# data.table approach
setDT(mydf)[, day_period := cut(time,
                                breaks = times(c("00:00:00", "05:00:00", "09:00:00",
                                                 "13:00:00", "17:00:00", "21:00:00",
                                                 "23:59:00")),
                                labels = c("Late night", "Early morning", "Late morning",
                                           "Early afternoon", "Late afternoon", "Evening"))][]

#   id     time      day_period
#1:  1 01:00:00      Late night
#2:  2 05:30:00   Early morning
#3:  3 10:00:00    Late morning
#4:  4 14:00:00 Early afternoon
#5:  5 17:00:00 Early afternoon
#6:  6 20:00:00  Late afternoon
#7:  7 23:00:00         Evening