【发布时间】:2014-07-30 13:13:04
【问题描述】:
我正在尝试解决一个起初看起来很简单但我发现自己陷入困境的问题。 所以,我有一个名为“out”的角色对象:
out<-c( " 59mn 59s", " 59mn 59s", " 1h 0mn", " 1h 0mn", " 1h 0mn", " 1h 0mn", " 1h 0mn", " 1h 0mn", " 59mn 59s"," 59mn 59s", " 46mn 42s")
我的最终目标是使用 lubridate 包中的函数“hms”将角色转换为时间对象。问题是数据集并不一致,在某些情况下我有几小时和几分钟,而在其他情况下我有几分钟和几秒钟。所以我尝试这样统一数据集:
out<-for(p in 1:length(out)) {
ifelse(!grepl("h",out[p]),paste("0h",out[p]),ifelse(!grepl("mn",out[p]),paste("0h 0mn",out[p]),ifelse(!grepl("s",out[p]),paste(out[p],"0s"))))
}
ifelse 语句本身可以正常工作,但是在 for 循环中它只返回 NULL。 有谁知道这段代码出了什么问题? 另一种选择是结合 lubridate 中的“hm”和“hms”功能,但我的技能不允许我走这条路。
非常感谢
【问题讨论】:
-
初学者有一个很好的答案,但是如果您不保存 for 循环的结果而是打印每次迭代,您会看到发生了什么
-
如果你想统一你的数据,你可能想删除一些字符串中的前导空格或最后一个空格。 (stackoverflow.com/q/10502787/2886003 可能会有所帮助)
标签: r if-statement for-loop lubridate