簡體   English   中英

如何在Dplyr mutate函數中將data.frame列值用作函數參數

[英]How to use data.frame column values as function argument in dplyr mutate function

我在使用dplyr軟件包的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.

是否有人知道我犯了什么錯誤,或者是否有簡單的解決方法?

提前致謝!

更新

由於存在不同的“時區”,因此可以選擇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轉換。

unclass ed是一個list時, mutate不支持POSIXlt類作為基礎結構

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
#...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM