【问题标题】:Pivot_longer on all columns所有列上的 Pivot_longer
【发布时间】:2020-08-10 05:09:42
【问题描述】:

我正在使用 tidyr 的 pivot_longer 将数据帧从宽转换为长。我希望使用所有列并在列中维护行名。较早的 melt 函数在此调用上完美运行

w1 <- reshape2::melt(w)
head(w1)
'data.frame':   900 obs. of  3 variables:
 $ Var1 : Factor w/ 30 levels "muscle system process",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ Var2 : Factor w/ 30 levels "muscle system process",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ value: num  NA NA NA NA NA NA NA NA NA NA ...

但是 pivot_longer 没有

w %>% pivot_longer()

Error in UseMethod("pivot_longer") : 
  no applicable method for 'pivot_longer' applied to an object of class "c('matrix', 'array', 'double', 'numeric')"

欢迎提出任何建议

【问题讨论】:

    标签: r tidyr


    【解决方案1】:

    显然一些数据会有所帮助,但您的问题在于您在 matrix 类的对象上使用 pivot_longer() 而不是 data.frame

    library(tidyr)
    
    # your error
    mycars <- as.matrix(mtcars)
    pivot_longer(mycars)
    
    Error in UseMethod("pivot_longer") : 
      no applicable method for 'pivot_longer' applied to an object of class
      "c('matrix', 'array', 'double', 'numeric')"
    

    pivot_longer() 将作用于数据框

    > class(mycars)
    [1] "matrix" "array" 
    > class(mtcars)
    [1] "data.frame"
    

    请记住指定 cols 参数,reshape2::melt() 中不需要此参数(文档中的更多信息)。你想要所有的列,所以cols = everything()

    pivot_longer(mtcars, cols = everything())
    

    (免责声明:当然,mtcars 不是转换为长格式的最佳数据集)

    【讨论】:

    • 这太棒了!还有一件事:我们如何在数据透视表中同时保留行名和列名?
    • 查看this 以了解有关较长数据框中列名的更多信息(尤其是names_tovalues_to 参数)。查看this 了解为什么tidyverse 通常不支持行名
    • 感谢您的快速回复@kmacierzanka。你的回答部分帮助了我。我更新了我的帖子以澄清我的目标。干杯!
    • 如果没有看到您的初始数据,很难提供帮助,请尝试dput(head(w)),以便我们可以看到您的起点。另外,写出准确的预期输出。
    猜你喜欢
    • 1970-01-01
    • 2022-09-27
    • 2022-09-26
    • 1970-01-01
    • 2021-06-26
    • 2021-09-07
    • 2020-08-05
    • 2020-04-02
    • 2022-01-08
    相关资源
    最近更新 更多