Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.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中的引用列创建4小时的时间间隔_R_Datetime_Intervals - Fatal编程技术网

使用R中的引用列创建4小时的时间间隔

使用R中的引用列创建4小时的时间间隔,r,datetime,intervals,R,Datetime,Intervals,我想使用数据帧中的参考列创建一个4小时的间隔。我有一个这样的数据框: species提示1,不要使用cbind创建具有不同列类型的data.frame,所有内容都强制为相同类型(在本例中为factor) findInterval或cut在这里似乎是合适的 df <- data.frame(species,ind,hour,depth) # copy df2 <- df df2$fourhour <- c(0,4,8,12,16,20)[findInterval(df$hour,

我想使用数据帧中的参考列创建一个4小时的间隔。我有一个这样的数据框:


species提示1,不要使用
cbind
创建具有不同列类型的data.frame,所有内容都强制为相同类型(在本例中为factor)

findInterval
cut
在这里似乎是合适的

df <- data.frame(species,ind,hour,depth)
# copy
df2 <- df
df2$fourhour <- c(0,4,8,12,16,20)[findInterval(df$hour, c(0,4,8,12,16,20))]

df提示1,不要使用
cbind
创建具有不同列类型的data.frame,所有内容都强制为相同类型(在本例中为factor)

findInterval
cut
在这里似乎是合适的

df <- data.frame(species,ind,hour,depth)
# copy
df2 <- df
df2$fourhour <- c(0,4,8,12,16,20)[findInterval(df$hour, c(0,4,8,12,16,20))]

df虽然可能有一种更简单的方法,但这里有一种尝试

但是,首先不要使用
cbind
创建data.frame,因此
hour
不是
因素,而是
数值

df <- data.frame(species,ind,hour,depth)
您还可以将标签做得更好,如:

cutseq <- seq(0,23,4)
df$interval <- factor(
                       findInterval(df$hour,cutseq),
                       labels=paste(cutseq,cutseq+3,sep="-")
                     )

虽然可能有一种更简单的方法,但这里有一种尝试

但是,首先不要使用
cbind
创建data.frame,因此
hour
不是
因素,而是
数值

df <- data.frame(species,ind,hour,depth)
您还可以将标签做得更好,如:

cutseq <- seq(0,23,4)
df$interval <- factor(
                       findInterval(df$hour,cutseq),
                       labels=paste(cutseq,cutseq+3,sep="-")
                     )

拿小时数列,把它转换成整数,然后用整数除法得到底数,怎么样?像这样的

# convert hour to integer (hour is currently a col of factors)
i <- as.numeric(levels(df$hour))[df$hour]

# make new column
df$interval <- (i %/% 4) * 4 
#将小时转换为整数(小时当前是系数的集合)

我拿小时列,把它转换成整数,然后用整数除法得到底数怎么样?像这样的

# convert hour to integer (hour is currently a col of factors)
i <- as.numeric(levels(df$hour))[df$hour]

# make new column
df$interval <- (i %/% 4) * 4 
#将小时转换为整数(小时当前是系数的集合)

我扩展了我的评论,因为我认为你最终会在某个时候寻找实际的日期

一些小时数据示例:

set.seed(1)
mydata <- data.frame(species = "ABC",
                     ind = rep(1:4, each=24),
                     depth = runif(96, 1, 50),
                     datetime = seq(ISOdate(2000, 1, 1, 0, 0, 0), 
                                    by = "1 hour", length.out = 96))
list(head(mydata), tail(mydata))
# [[1]]
#   species ind    depth            datetime
# 1     ABC   1 14.00992 2000-01-01 00:00:00
# 2     ABC   1 19.23407 2000-01-01 01:00:00
# 3     ABC   1 29.06981 2000-01-01 02:00:00
# 4     ABC   1 45.50218 2000-01-01 03:00:00
# 5     ABC   1 10.88241 2000-01-01 04:00:00
# 6     ABC   1 45.02109 2000-01-01 05:00:00
# 
# [[2]]
#    species ind     depth            datetime
# 91     ABC   4 12.741841 2000-01-04 18:00:00
# 92     ABC   4  3.887784 2000-01-04 19:00:00
# 93     ABC   4 32.472125 2000-01-04 20:00:00
# 94     ABC   4 43.937191 2000-01-04 21:00:00
# 95     ABC   4 39.166819 2000-01-04 22:00:00
# 96     ABC   4 40.068132 2000-01-04 23:00:00
请注意,新的“hourclass”变量是一个因子,而新的“hourfloor”变量是字符,但即使在
阶段中,您也可以轻松更改这些变量

str(mydata)
# 'data.frame':    96 obs. of  6 variables:
#  $ species  : Factor w/ 1 level "ABC": 1 1 1 1 1 1 1 1 1 1 ...
#  $ ind      : int  1 1 1 1 1 1 1 1 1 1 ...
#  $ depth    : num  14 19.2 29.1 45.5 10.9 ...
#  $ datetime : POSIXct, format: "2000-01-01 00:00:00" "2000-01-01 01:00:00" ...
#  $ hourclass: Factor w/ 24 levels "2000-01-01 00:00:00",..: 1 1 1 1 2 2 2 2 3 3 ...
#  $ hourfloor: chr  "00" "00" "00" "00" ...

继续我的评论,因为我认为你最终会在某个时候寻找实际的日期

一些小时数据示例:

set.seed(1)
mydata <- data.frame(species = "ABC",
                     ind = rep(1:4, each=24),
                     depth = runif(96, 1, 50),
                     datetime = seq(ISOdate(2000, 1, 1, 0, 0, 0), 
                                    by = "1 hour", length.out = 96))
list(head(mydata), tail(mydata))
# [[1]]
#   species ind    depth            datetime
# 1     ABC   1 14.00992 2000-01-01 00:00:00
# 2     ABC   1 19.23407 2000-01-01 01:00:00
# 3     ABC   1 29.06981 2000-01-01 02:00:00
# 4     ABC   1 45.50218 2000-01-01 03:00:00
# 5     ABC   1 10.88241 2000-01-01 04:00:00
# 6     ABC   1 45.02109 2000-01-01 05:00:00
# 
# [[2]]
#    species ind     depth            datetime
# 91     ABC   4 12.741841 2000-01-04 18:00:00
# 92     ABC   4  3.887784 2000-01-04 19:00:00
# 93     ABC   4 32.472125 2000-01-04 20:00:00
# 94     ABC   4 43.937191 2000-01-04 21:00:00
# 95     ABC   4 39.166819 2000-01-04 22:00:00
# 96     ABC   4 40.068132 2000-01-04 23:00:00
请注意,新的“hourclass”变量是一个因子,而新的“hourfloor”变量是字符,但即使在
阶段中,您也可以轻松更改这些变量

str(mydata)
# 'data.frame':    96 obs. of  6 variables:
#  $ species  : Factor w/ 1 level "ABC": 1 1 1 1 1 1 1 1 1 1 ...
#  $ ind      : int  1 1 1 1 1 1 1 1 1 1 ...
#  $ depth    : num  14 19.2 29.1 45.5 10.9 ...
#  $ datetime : POSIXct, format: "2000-01-01 00:00:00" "2000-01-01 01:00:00" ...
#  $ hourclass: Factor w/ 24 levels "2000-01-01 00:00:00",..: 1 1 1 1 2 2 2 2 3 3 ...
#  $ hourfloor: chr  "00" "00" "00" "00" ...

我想你应该看看
?cut
,尤其是
?cut.Date
。我想你应该看看
?cut
,尤其是
?cut.Date
。基于这个相同的例子,你如何找到6到17之间的小时间隔(seq(6,17,1))并在另一列中命名为“daytimes”?夜间也是如此,哪些时间是非白天的剩余时间?基于同一个示例,您如何找到6到17之间的时间间隔(seq(6,17,1))并在另一列中将其命名为“daytimes”?夜间也是如此,哪些时间是非白天的剩余时间?@aleph_null基于同一示例,您如何找到6到17之间的时间间隔(seq(6,17,1))并在另一列中将其命名为“daytimes”?夜间也是如此,哪些时间是非白天的剩余时间?@aleph_null基于同一示例,您如何找到6到17之间的时间间隔(seq(6,17,1))并在另一列中将其命名为“daytimes”?夜间也一样,哪些时间不是白天?