【问题标题】:Is pivot_longer() and pivot_wider() transitive? [duplicate]pivot_longer() 和 pivot_wider() 是可传递的吗? [复制]
【发布时间】:2019-09-17 15:24:06
【问题描述】:

我想将函数 pivot_longer() 和 pivot_wider() 用于虹膜数据集。这是加长数据的代码:

iris_ds <- iris %>% pivot_longer(-Species, names_to = "Measure", values_to = "Value")

在文档中它说pivot_wider() 是pivot_longer() 的逆变换,所以我应用了代码:

iris_or <- iris_ds %>% pivot_wider(names_from = "Measure", values_from = "Value")

我得到下表:

    Species    Sepal.Length      Sepal.Width    Petal.Length    Petal.Width
    setosa     <dbl>             <dbl>          <dbl>           <dbl>
    versicolor <dbl>             <dbl>          <dbl>           <dbl>
    virginica  <dbl>             <dbl>          <dbl>           <dbl>

这在gather() spread() 类似问题中得到了回答(建议使用RowId),我想要的帮助是新函数pivot_longer 和pivot_wider 是否有办法管理它以使其具有传递性。提前感谢您的回答。

【问题讨论】:

  • 您可以在末尾添加%&gt;% unnest 以恢复原始尺寸
  • 你好@IceCreamToucan,我尝试了你的建议,它给了我原始数据集,只是警告说现在需要 cols。谢谢。

标签: r tidyr


【解决方案1】:

简短的回答是否定的,pivot_* 中没有任何内容可以解决这个问题。将来向pivot_longer 添加一些内容以从内部生成唯一的rowID 可能是一个好主意。

如您所说,解决方法是自己添加此类行 ID,使用 tibblerowid_to_column

iris %>% rowid_to_column() %>% 
  pivot_longer(-c(Species,rowid), names_to = "Measure", values_to = "Value") %>% 
  pivot_wider(names_from = "Measure", values_from = "Value")

这会让你回到 iris。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 2017-02-22
    • 2014-08-07
    • 1970-01-01
    相关资源
    最近更新 更多