【问题标题】:How to convert a list column to a vector in a tibble in R如何将列表列转换为R中tibble中的向量
【发布时间】:2019-02-28 19:52:16
【问题描述】:

我正在尝试折叠下面 tibble(称为数据)中的 Weeks 列,以便结果是一个包含两列的 tibble:1 表示周,另一列表示关联值。由于周列是一个列表,我不知道该怎么做。你能帮忙吗?

> head(data)
# A tibble: 6 x 1
  ``$Weeks   $Value
  <list>      <dbl>
1 <date [9]>     30
2 <date [3]>     20
3 <date [3]>     15
4 <date [5]>     10
5 <date [2]>      9
6 <date [9]>      5

想要的结果如下:

      $Weeks   $Value
      <Date>      <dbl>
 1  "2019-01-01     30
 2  "2019-01-08     30
 3  "2019-01-15     30
 etc..

当前结构:

  > str(data)
List of 1
 $ :Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   7 obs. of  2 variables:
  ..$ Weeks:List of 7
  .. ..$ : Date[1:9], format: "2018-11-11" "2018-11-18" "2018-11-25" "2018-12-02" ...
  .. ..$ : Date[1:3], format: "2018-12-02" "2018-12-09" "2018-12-16"
  .. ..$ : Date[1:3], format: "2018-12-23" "2018-12-30" "2019-01-06"
  .. ..$ : Date[1:5], format: "2018-11-04" "2018-11-11" "2018-11-18" "2018-11-25" ...
  .. ..$ : Date[1:2], format: "2018-11-25" "2018-12-02"
  .. ..$ : Date[1:9], format: "2018-11-18" "2018-11-25" "2018-12-02" "2018-12-09" ...
  .. ..$ : Date[1:14], format: "2018-09-30" "2018-10-07" "2018-10-14" "2018-10-21" ...
  ..$ Value: num [1:7] 30 20 15 10 9 5 6

输入(数据)

> dput(data)
list(structure(list(Weeks = list(structure(c(17846, 17853, 17860, 
17867, 17874, 17881, 17888, 17895, 17902), class = "Date"), structure(c(17867, 
17874, 17881), class = "Date"), structure(c(17888, 17895, 17902
), class = "Date"), structure(c(17839, 17846, 17853, 17860, 17867
), class = "Date"), structure(c(17860, 17867), class = "Date"), 
    structure(c(17853, 17860, 17867, 17874, 17881, 17888, 17895, 
    17902, 17909), class = "Date"), structure(c(17804, 17811, 
    17818, 17825, 17832, 17839, 17846, 17853, 17860, 17867, 17874, 
    17881, 17888, 17895), class = "Date")), Value = c(30, 20, 
15, 10, 9, 5, 6)), row.names = c(NA, -7L), class = c("tbl_df", 
"tbl", "data.frame")))

【问题讨论】:

  • 试试data %&gt;% unnest
  • 我做到了。我收到一个错误:mutate_impl(.data, dots, caller_env()) 中的错误:尝试使用零长度变量名
  • 您能否使用dput分享数据样本
  • 当然:> dput(data) structure(list(structure(list(Weeks = list(structure(c(17846, 17853, 17902), class= "Date")), structure(c(17867 , 17874), class= "日期"), 结构(c(17888, 17895, 17902), class= "日期"), 结构(c(17839, 17846, 17853), class= "日期"), 结构(c (17860, 17867), class= "日期"), 结构 (c(17853, 17874,), class= "日期"), 值 = c(30, 20, 15, 10, 9)), row.names = c(NA, -7L), class= c("tbl_df", "tbl", "data.frame"))), .Names = "", row.names = c(NA, -7L), class= c ("tbl_df", "tbl", "data.frame"))
  • 您的 dput 输出出现错误。如果您需要矢量,thebn 只需执行 unlist(data$Weeks)

标签: r dataframe tibble


【解决方案1】:

已编辑答案

好的,因此您的原始数据存储为列表,这不允许unnest() 函数按预期运行。我们需要先提取元素。然后,因为您的 list-column 本身就是一个列表列表,所以我们必须使用 map 来提取我们想要的内容。 下面的解决方案解决了这个问题,并为您提供您想要的。

  > data[[1]] %>%
      mutate(Weeks = map(Weeks, ~ tibble(Weeks =.x))) %>%
      unnest()

输出:

  # A tibble: 45 x 2
    Value Weeks     
    <dbl> <date>    
  1    30 2018-11-11
  2    30 2018-11-18
  3    30 2018-11-25
  4    30 2018-12-02
  5    30 2018-12-09
  6    30 2018-12-16
  7    30 2018-12-23
  8    30 2018-12-30
  9    30 2019-01-06
 10    20 2018-12-02

原答案:

正如 akrun 在 cmets 中所说,您可以这样做 unnest(data, Weeks)

【讨论】:

  • 我这样做并得到一个错误:> unnest(data,Weeks) mutate_impl(.data, dots, caller_env()) 中的错误:尝试使用零长度变量名
  • > glimpse(data) 观察:7 个变量:1 $ ``
  • 您可以重试dput 输出吗?我认为您在之前的尝试中错误地复制和粘贴了某些内容,因为它返回了错误。
  • 这里粘贴太长了。我将它粘贴在上面的原始帖子中。谢谢
  • OP 有一个单项列表。 unnest(data[[1]]) 工作调用他们的 dput data
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-12
  • 1970-01-01
  • 2021-12-25
  • 2018-12-08
  • 2020-12-16
相关资源
最近更新 更多