簡體   English   中英

在數據框行上運行purrr :: map_dfr?

[英]Run purrr::map_dfr on dataframe rows?

給定一個dataframe purrr::map_dfr()例如iris默認值),如何配置purrr::map_dfr()函數以在該dataframe purrr::map_dfr()每一行上運行並執行函數foo

這是我df的一行,請考慮到該值始終是大JSON:

structure(list(Key = "2019/01/04/14/kuku@pupu.com_2ed026cb-8e9f-4392-9cc4-9f580b9d3aab_1345a5a4-3d5b-48a0-a678-67ed09a6f487_2019-01-04-14-52-43-537", 
    LastModified = "2019-01-04T14:52:44.000Z", ETag = "\"1c6269ab8b7baa85f0d2567de417f0d0\"", 
    Size = 35280, Owner = "e7c0d260939d15d18866126da3376642e2d4497f18ed762b608ed2307778bdf1", 
    StorageClass = "STANDARD", Bucket = "comp-kukupupu-streamed-data", 
    user_name = "kuku@pupu.com", value = list(---here goes a large json), 
    obs_id = 1137L), row.names = 1L, class = "data.frame")

我的功能是:

extract_scroll_data <- function(df) {

  tryCatch({

    j <- fromJSON(unlist(df$value))

    if (is_empty(fromJSON(j$sensorsData)) | is_empty(fromJSON(j$eventList))) {

      return(tibble())

    } else {

      return(set_names(as_tibble(fromJSON(j$eventList, bigint_as_char = TRUE), 
                                 .name_repair = "unique"), 
                       nm = c("time_stamp", 
                              "x", "y", "size", 
                              "pressure", "scroll", "state")) %>%
               dplyr::mutate("user_name" = df$user_name,
                             "obs_id" = df$obs_id))
    }

  }, warning = function(war) {

    # Warning handler picks up where error was generated:
    print(paste0("Warning: occured at ", df$obs_id, war))

  }, error = function(err) {

    # error handler picks up where error was generated
    print(paste0("Error: occured at ", df$obs_id, err))

  }, finally = {

    gc()

  })

}

請告知為什么它不使用數據框行?

map_dfr() ,就像map族的任何其他成員在列表和data.frame它實際上是列的列表。 您可以使用typeof(iris)as.list(iris) 要使map_dfr()遍歷行,必須使用split()函數將data.frame轉換為行列表。

iris %>%
  split(1:nrow(.)) %>%
  purrr::map_dfr(do_stuff)

暫無
暫無

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

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