将函数应用于 R 数据帧中的时间序列
applying a function to a timeseries in a R dataframe
我正在尝试将函数应用于包含日期的数据框中的列,但一直出现错误。我不确定自己做错了什么。
我的数据框:
dates total
1 2014-12-08 01:10:00 163.7
2 2014-12-08 01:10:00 163.9
3 2014-12-08 01:12:00 163.6
4 2014-12-08 08:27:00 163.0
5 2014-12-08 08:35:00 163.7
6 2014-12-08 08:39:00 162.4
我想用 'morning' 或 'night' 替换日期,或者用 'morning' 或 'night' 创建一个新列。我采取的方法涉及取消日期的分类,这样我就可以得到时间。我将一个晚上定义为凌晨 4 点之前或下午 5 点之后。我把它放在一个叫做 timeofday 的函数中:
timeofday <- function(x) {
bmk <- unclass(x)
if (bmk$hour < 4) {
return("night")
} else if (bmk$hour > 17) {
return("night")
} else {
return("morning")
}
}
然后我做了以下事情:
timeofday(df$dates)
Warning message:
In if (bmk$hour < 4) { :
the condition has length > 1 and only the first element will be used
如果您能帮助我们确定问题,我们将不胜感激。
您的代码包含此 if 语句
if (bmk$hour < 4)
如果 bmk 是一个向量,就像您的情况一样,您有一个包含向量的 if 语句,因此它将只考虑向量的第一个元素。
这是解决方法
sapply(df$dates, timeofday)
您也可以使用 cut
,如:
cut(unclass(x)$hour-7,c(0,15,24)-8,c('night','morning'))
(注意你必须改变你的参照系,这样你就没有两个 'night' 类别与这个解决方案)
我正在尝试将函数应用于包含日期的数据框中的列,但一直出现错误。我不确定自己做错了什么。
我的数据框:
dates total
1 2014-12-08 01:10:00 163.7
2 2014-12-08 01:10:00 163.9
3 2014-12-08 01:12:00 163.6
4 2014-12-08 08:27:00 163.0
5 2014-12-08 08:35:00 163.7
6 2014-12-08 08:39:00 162.4
我想用 'morning' 或 'night' 替换日期,或者用 'morning' 或 'night' 创建一个新列。我采取的方法涉及取消日期的分类,这样我就可以得到时间。我将一个晚上定义为凌晨 4 点之前或下午 5 点之后。我把它放在一个叫做 timeofday 的函数中:
timeofday <- function(x) {
bmk <- unclass(x)
if (bmk$hour < 4) {
return("night")
} else if (bmk$hour > 17) {
return("night")
} else {
return("morning")
}
}
然后我做了以下事情:
timeofday(df$dates)
Warning message:
In if (bmk$hour < 4) { :
the condition has length > 1 and only the first element will be used
如果您能帮助我们确定问题,我们将不胜感激。
您的代码包含此 if 语句
if (bmk$hour < 4)
如果 bmk 是一个向量,就像您的情况一样,您有一个包含向量的 if 语句,因此它将只考虑向量的第一个元素。
这是解决方法
sapply(df$dates, timeofday)
您也可以使用 cut
,如:
cut(unclass(x)$hour-7,c(0,15,24)-8,c('night','morning'))
(注意你必须改变你的参照系,这样你就没有两个 'night' 类别与这个解决方案)