欢迎来到Stack Overflow!
首先,你得到一些反对票的原因很可能是因为你没有给你太多的问题继续下去。首先,你没有告诉我们什么
(dataframe[z, ])$variable
是,这使我们很难制定一个完整的答案。您似乎试图从数据框中提取单个值,是吗?如果是这样,我从来没有见过它这样做的方式,尝试更换上面:
dataframe$variable[z]
我的猜测是你想达到什么样的数据帧的一整列的所谓的“变量”的比较,因为这通常更有用...
话虽如此,我经常反对与时间数据的问题,从我听到的,我的经验并不少见。当我正在处理的时候,因为看起来你在这里,我更喜欢在POSIXct上使用chron :: times格式(POSIX是日期时间格式,所以总是包含日期,它也会尝试更正时区更改,以及夏令时的变化,这些变化往往会影响我的方式而不是帮助)。如果您的数据采用了您在第一次as.POSIXct调用中指定的格式,那么您甚至不需要指定调用times函数。
x <- chron::times(dataframe$variable)
print(x)
position <- ifelse (x >= chron::times("06:00:00") &
x < chron::times("12:00:00"),
"first", "not first"
)
这将输出一个矢量“位置”,其结果是从dataframe $ variable中获取的所有值。这是否达到了你的期望?
从这里,如果你是想提取的比较结果在数据帧的特定行“Z”,你仍然可以做到这一点与
position[z]
编辑补充: 这可能是值得检查缺少“变量”中的值。这应该返回TRUE:
sum(is.na(dataframe$variable)) == 0
还检查任何格式不正确。同样,这应该返回TRUE:
sum(is.na(chron::times(dataframe$variable))) == 0
编辑补充: 按照意见,它看起来像某些值在“变量”列不正确转换。你应该可以找到它们
subset(dataframe, is.na(chron::times(variable)))
这应该让你看看有什么不对。它可能是一个单元,也可能是其中的一部分。你需要整理这些数据,你可以用几种方法来完成。您可以手动完成并修复它们,您可以在脚本中添加一个函数以在转换之前修复它们(如果所有这些值之间存在共同的问题,或者您希望遇到同样的问题,这可能是个好主意当新数据进入时再次发生,如果确实需要允许的话)。
另一种选择是简单地从分析中排除这些行。如果你走这条路线,确保它适合你正在运行的分析。如果你的情况适合,您可以添加步运行在你的问题的步骤之前进行清理数据框:
dataframe <- subset(dataframe, !is.na(chron::times(variable)))
注意:有一个很好的机会,这将拿出一个警告。如果两次运行同一行,并且第二次警告消失(在违规行被删除后),则可能需要进一步研究。
这应该放弃违规值,只保留正确转换为时间格式的值,这应该有助于您尝试运行的步骤。检查您的数据框维度在该步骤之前和之后的变化情况;那会告诉你你有多少行正在丢失。
你可以用POSIXct做同样的事情,如果这就是你感觉舒服的话,我个人更喜欢你正在做的事。
如果有人知道我可以在if语句中比较as.POSIXct对象,我将非常感激。 –
我可以假设您已将问题缩小到您向我们展示的代码部分了吗?否则你的错误说,所以我希望你已经裁定“出发 - 到达”部分? – rosscova
因为你的值已经是正确的格式,你打电话给substr的任何原因? – rosscova