【发布时间】:2014-02-17 09:32:15
【问题描述】:
基本上我有几天的大型时间序列数据框。我已经编写了一些代码,它在数据框中一次只运行一天,但现在我想对其进行调整,以便它运行一整天。对于我的数据框中的每一天,都有一列包含当天的日出时间和一列包含日落时间。我想利用这些时间将每一天分成白天和晚上。我的日出日落柱子看起来像这样,而且每天都不一样:
Sunrise Sunset
2010-01-19 08:55:12 2010-01-19 17:26:34
我使用 split 将数据框按日期划分,以给出一个包含 10 个元素(天)的大列表
# Splits data frame by date
sepdays<- split(df, df$Date)
# Function to split each day into day and night hours
daynight <- function(){
rise <- as.character(df$Sunrise[1])
rise <- substr(rise, 12,19)
set <- as.character(df$Sunset[1])
set <- substr(set, 12,19)
day <- df[df$Time>rise & df$Time<set, ]
df.night1<-df[df$Time<rise,]
df.night2<-df[df$Time>set,]
night <- merge.data.frame(df.night1,df.night2, sort = TRUE, all.x = TRUE, all.y=TRUE)
return(table(day$Activity))
}
# Apply function over list of days
lapply(sepdays,daynight)
当我运行 lapply 时,出现未使用的参数错误:
FUN(X[[1L]], ...) 中的错误:未使用的参数 (X[[1]])
我也不确定这是否是获取每个匹配日的特定日出/日落时间的最佳方式。我意识到我的函数没有参数,但我是 R 新手,所以不太确定自己在做什么。
这是我的数据的样子。
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-20 08:54:13 2010-01-20 17:28:11
2010-01-19 00:01:00 0 2010-01-20 08:54:13 2010-01-20 17:28:11
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
我希望我的输出包含每个日期的活动表,例如:
2010-01-19
1 0
2 0
2010-01-20
1 0
2 3
【问题讨论】:
-
您正在尝试重新发明轮子。使用 R 的日期时间工具和包,如 plyr、dplyr 或 data.table。如果您清楚地说明您的最终目标并在您的问题中添加示例数据(例如,使用
dput(head(df))),那么应该会有人向您展示如何轻松做到这一点。 -
您的示例输出表与示例输入有什么关系?
-
每天都应该生成一个活动值表。 IE。每天的 1 总数和 0 总数。
-
错误信息告诉你函数
daynight需要有参数。daynight <- function()应该是daynight <- function(df)。 -
我看到两个
1和两个0用于 2010-01-19。与日出/日落时间的关系在哪里?
标签: r dataframe time-series lapply