Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.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 编写一个函数来覆盖大列表_R_Dataframe_Time Series_Lapply - Fatal编程技术网

R 编写一个函数来覆盖大列表

R 编写一个函数来覆盖大列表,r,dataframe,time-series,lapply,R,Dataframe,Time Series,Lapply,基本上,我有一个大的时间序列数据帧在几天内。我曾经写过一些代码,在数据帧中一次只能运行一天,但现在我想对其进行调整,使其能够运行所有天。对于我的数据框中的每一天,都有一列包含当天的日出时间,还有一列包含日落时间。我想用这些时间把每天分成白天和晚上。我的日出日落柱看起来是这样的,每天都不同: Sunrise Sunset 2010-01-19 08:55:12 2010-01-19 17:26:34 我使用split将数据框按日期划分,得到一个包含10个元素(天)的大列

基本上,我有一个大的时间序列数据帧在几天内。我曾经写过一些代码,在数据帧中一次只能运行一天,但现在我想对其进行调整,使其能够运行所有天。对于我的数据框中的每一天,都有一列包含当天的日出时间,还有一列包含日落时间。我想用这些时间把每天分成白天和晚上。我的日出日落柱看起来是这样的,每天都不同:

Sunrise              Sunset
2010-01-19 08:55:12 2010-01-19 17:26:34
我使用split将数据框按日期划分,得到一个包含10个元素(天)的大列表

我希望我的输出包含每个日期的活动表,例如:

2010-01-19
1  0
2  0

2010-01-20
1  0
2  3

我不太确定,因为你的问题很模糊,但我认为你可以这样做:

DF <- read.table(text="Date,       Time,      Activity,  Sunrise,              Sunset
2010-01-19, 23:58:00,  1,         2010-01-19 08:55:12,  2010-01-19 17:26:34
2010-01-19, 23:59:00,  1,         2010-01-19 08:55:12,  2010-01-19 17:26:34
2010-01-19, 00:00:00,  0,         2010-01-19 08:55:12,  2010-01-19 17:26:34
2010-01-19, 00:01:00,  0,         2010-01-19 08:55:12,  2010-01-19 17:26:34
2010-01-19, 09:01:00,  0,         2010-01-19 08:55:12,  2010-01-19 17:26:34
2010-01-20, 00:02:00,  1,         2010-01-20 08:54:13,  2010-01-20 17:28:11
2010-01-20, 00:03:00,  0,         2010-01-20 08:54:13,  2010-01-20 17:28:11
2010-01-20, 00:04:00,  1,         2010-01-20 08:54:13,  2010-01-20 17:28:11", header=TRUE, sep=",")

DF$datetime <- as.POSIXct(paste(DF$Date, DF$Time), "%Y-%m-%d %H:%M:%S", tz="GMT")
DF$date <- as.Date(DF$datetime)
DF$Sunrise <- as.POSIXct(DF$Sunrise, "%Y-%m-%d %H:%M:%S", tz="GMT")
DF$Sunset <- as.POSIXct(DF$Sunset, "%Y-%m-%d %H:%M:%S", tz="GMT")


DF$day <- (DF$datetime > DF$Sunrise) & (DF$datetime < DF$Sunset)

#        Date      Time Activity             Sunrise              Sunset            datetime   day       date
#1 2010-01-19  23:58:00        1 2010-01-19 08:55:12 2010-01-19 17:26:34 2010-01-19 23:58:00 FALSE 2010-01-19
#2 2010-01-19  23:59:00        1 2010-01-19 08:55:12 2010-01-19 17:26:34 2010-01-19 23:59:00 FALSE 2010-01-19
#3 2010-01-19  00:00:00        0 2010-01-19 08:55:12 2010-01-19 17:26:34 2010-01-19 00:00:00 FALSE 2010-01-19
#4 2010-01-19  00:01:00        0 2010-01-19 08:55:12 2010-01-19 17:26:34 2010-01-19 00:01:00 FALSE 2010-01-19
#5 2010-01-19  09:01:00        0 2010-01-19 08:55:12 2010-01-19 17:26:34 2010-01-19 09:01:00  TRUE 2010-01-19
#6 2010-01-20  00:02:00        1 2010-01-20 08:54:13 2010-01-20 17:28:11 2010-01-20 00:02:00 FALSE 2010-01-20
#7 2010-01-20  00:03:00        0 2010-01-20 08:54:13 2010-01-20 17:28:11 2010-01-20 00:03:00 FALSE 2010-01-20
#8 2010-01-20  00:04:00        1 2010-01-20 08:54:13 2010-01-20 17:28:11 2010-01-20 00:04:00 FALSE 2010-01-20

table(DF[,c("date", "Activity", "day")])

#, , day = FALSE
#
#            Activity
#date         0 1
#  2010-01-19 2 2
#  2010-01-20 1 2
#
#, , day = TRUE
#
#            Activity
#date         0 1
#  2010-01-19 1 0
#  2010-01-20 0 0

DF您正在尝试重新发明轮子。使用R的datetime工具和包,如plyr、dplyr或data.table。如果你清楚地陈述了你的最终目标,并在你的问题中添加了示例数据(例如,使用
dput(head(df))
),那么应该有人能够向你展示如何轻松地做到这一点。你的示例输出表与示例输入有何关联?每天都应该生成一个活动值表。即每天1的总数和0的总数。错误消息告诉您函数
daynight
需要有一个参数<代码>日夜我看到2010-01-19有两个
1
和两个
0
。日出/日落时间的关系在哪里?
2010-01-19
1  0
2  0

2010-01-20
1  0
2  3
DF <- read.table(text="Date,       Time,      Activity,  Sunrise,              Sunset
2010-01-19, 23:58:00,  1,         2010-01-19 08:55:12,  2010-01-19 17:26:34
2010-01-19, 23:59:00,  1,         2010-01-19 08:55:12,  2010-01-19 17:26:34
2010-01-19, 00:00:00,  0,         2010-01-19 08:55:12,  2010-01-19 17:26:34
2010-01-19, 00:01:00,  0,         2010-01-19 08:55:12,  2010-01-19 17:26:34
2010-01-19, 09:01:00,  0,         2010-01-19 08:55:12,  2010-01-19 17:26:34
2010-01-20, 00:02:00,  1,         2010-01-20 08:54:13,  2010-01-20 17:28:11
2010-01-20, 00:03:00,  0,         2010-01-20 08:54:13,  2010-01-20 17:28:11
2010-01-20, 00:04:00,  1,         2010-01-20 08:54:13,  2010-01-20 17:28:11", header=TRUE, sep=",")

DF$datetime <- as.POSIXct(paste(DF$Date, DF$Time), "%Y-%m-%d %H:%M:%S", tz="GMT")
DF$date <- as.Date(DF$datetime)
DF$Sunrise <- as.POSIXct(DF$Sunrise, "%Y-%m-%d %H:%M:%S", tz="GMT")
DF$Sunset <- as.POSIXct(DF$Sunset, "%Y-%m-%d %H:%M:%S", tz="GMT")


DF$day <- (DF$datetime > DF$Sunrise) & (DF$datetime < DF$Sunset)

#        Date      Time Activity             Sunrise              Sunset            datetime   day       date
#1 2010-01-19  23:58:00        1 2010-01-19 08:55:12 2010-01-19 17:26:34 2010-01-19 23:58:00 FALSE 2010-01-19
#2 2010-01-19  23:59:00        1 2010-01-19 08:55:12 2010-01-19 17:26:34 2010-01-19 23:59:00 FALSE 2010-01-19
#3 2010-01-19  00:00:00        0 2010-01-19 08:55:12 2010-01-19 17:26:34 2010-01-19 00:00:00 FALSE 2010-01-19
#4 2010-01-19  00:01:00        0 2010-01-19 08:55:12 2010-01-19 17:26:34 2010-01-19 00:01:00 FALSE 2010-01-19
#5 2010-01-19  09:01:00        0 2010-01-19 08:55:12 2010-01-19 17:26:34 2010-01-19 09:01:00  TRUE 2010-01-19
#6 2010-01-20  00:02:00        1 2010-01-20 08:54:13 2010-01-20 17:28:11 2010-01-20 00:02:00 FALSE 2010-01-20
#7 2010-01-20  00:03:00        0 2010-01-20 08:54:13 2010-01-20 17:28:11 2010-01-20 00:03:00 FALSE 2010-01-20
#8 2010-01-20  00:04:00        1 2010-01-20 08:54:13 2010-01-20 17:28:11 2010-01-20 00:04:00 FALSE 2010-01-20

table(DF[,c("date", "Activity", "day")])

#, , day = FALSE
#
#            Activity
#date         0 1
#  2010-01-19 2 2
#  2010-01-20 1 2
#
#, , day = TRUE
#
#            Activity
#date         0 1
#  2010-01-19 1 0
#  2010-01-20 0 0