首页 > 解决方案 > 如何使用 R 中的 tidyverse 将列表对象制作为长格式的数据框

问题描述

dd <- list(c("2020-1-2","SDF","fff,33"),
           c("2020-1-3","KKK","ffd,23","fffdf,23","ssfds,43"))
dd
# [[1]]
# [1] "2020-1-2" "SDF"      "fff,33"  

# [[2]]
# [1] "2020-1-3" "KKK"      "ffd,23"   "fffdf,23" "ssfds,43"

ddtarget <- data.frame(date= c("2020-1-2","2020-1-3","2020-1-3","2020-1-3"),
                       category = c("SDF","KKK","KKK","KKK"),
                       element = c("fff,33","ffd,23","fffdf,23","ssfds,43"))
ddtarget
#       date category  element
# 1 2020-1-2      SDF   fff,33
# 2 2020-1-3      KKK   ffd,23
# 3 2020-1-3      KKK fffdf,23
# 4 2020-1-3      KKK ssfds,43

我想用 tidyverse (例如 map() 或类似函数)将 dd 转换为 ddtarget,但我自己做不到。谁能帮我?

标签: rtidyverse

解决方案


假设前两列的长度始终为 1,而第三列是所有剩余元素,这是一种使用map_df

purrr::map_df(dd,~tibble(date = .x[1], category = .x[2],element = .x[3:length(.x)]))

# A tibble: 4 x 3
#  date     category element 
#  <chr>    <chr>    <chr>   
#1 2020-1-2 SDF      fff,33  
#2 2020-1-3 KKK      ffd,23  
#3 2020-1-3 KKK      fffdf,23
#4 2020-1-3 KKK      ssfds,43

推荐阅读