我使用mutate
软件包的dplyr
函数来遇到问题。我想使用一列作为strptime
函数的参数
示例df:
rdf=data.frame(
d="20180514",
h=sample(1:25, 10)-1,
m=sample(1:60, 10)-1
)
df = data.frame(
stringtime = paste(rdf$d, rdf$h, rdf$m, sep=""),
timezone = sample(rep(c("GMT", "CET"), 5), 10)
)
df
stringtime timezone
1 201805141701 CET
2 201805140116 GMT
.
.
凭直觉,我想按如下方式运行命令:
df %>% mutate(timestamp = strptime(stringtime, tz=timezone, format="%Y%m%d%h%M")
不幸的是,我收到一条错误消息:
Error in [...]: invalid 'tz' value.
有人知道我犯了什么错误,或者是否有一个简单的解决方法?
谢谢!
答案 0 :(得分:1)
由于存在不同的“时区”,因此可以选择group_split
然后指定first
“时区”
library(dplyr)
library(purrr)
df %>%
group_split(timezone) %>%
map_df(~ .x %>%
mutate(timestamp = as.POSIXct(stringtime,
format = "%Y%m%d%H%M", tz = as.character(first(timezone)))))
根据strptime
当strptime将字符向量转换为“ POSIXlt”类:其输入x首先由as.character转换。
POSIXlt
ed为mutate
时,unclass
不支持 list
类作为基础结构
df %>%
mutate(timestamp = as.POSIXlt(stringtime, format="%Y%m%d%H%M"))
错误:列
timestamp
属于不支持的POSIXlt类;请用 代替POSIXct
代替使用as.POSIXct
df %>%
mutate(timestamp = as.POSIXct(stringtime, format="%Y%m%d%H%M"))
# stringtime timezone timestamp
#1 201805141314 GMT 2018-05-14 13:14:00
#2 20180514115 GMT 2018-05-14 11:05:00
#3 201805141434 CET 2018-05-14 14:34:00
#...