【问题标题】:R - Type Casting With Map()R - 使用 Map() 进行类型转换
【发布时间】:2021-10-18 05:02:16
【问题描述】:

我想创建一个新列,从时间戳中提取小时作为数字数据类型。如果我有一个数据框或 tibble,我会这样做:

calories_hourly$activity_hour_num <- calories_hourly$activity_hour %>% mdy_hms() %>% format(format = ('%H')) %>% as.numeric()

但是,我有一个名为“fitbit_data”的 18 个 tibbles 列表,我想在其中对 tibbles 6-16 执行上述操作。类型转换是从我所有 tibbles 的第二列中计算出来的。我在下面有一个失败尝试开始的示例:

fitbit_data[6:16] <- fitbit_data[6:16] %>% mutate(activity_hour_num=map(.x=fitbit_data[6:16], .f=~mdy(.x[2])))

你能帮我编写一个针对这个 R 任务的整洁解决方案吗?

非常感谢!

【问题讨论】:

    标签: r tidyverse purrr


    【解决方案1】:

    您可以将map 用作-

    library(purrr)
    library(lubridate)
    library(dplyr)
    
    k <- 6:16
    
    fitbit_data[k] <- map(fitbit_data[k], ~{.x[[2]] <- lubridate::mdy(.x[[2]]);.x})
    

    基于你可以做的第一次尝试-

    fitbit_data[k] <- map(fitbit_data[k], ~.x %>% 
                            mutate(activity_hour = mdy_hms(activity_hour) %>% 
                                                   format('%H') %>% as.numeric()))
    

    【讨论】:

    • 谢谢!它给了我我需要的东西。您能解释一下 map() 函数中 ~.x %&gt;% 的原因吗?我以为fitbit_data[k] 充当了“.x”?
    • mutate 需要一个数据框作为输入,fitbit_data[k] 是一个数据框列表。使用map,我们将函数分别应用于每个数据帧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-22
    相关资源
    最近更新 更多