如何将命名向量更改为保留名称的数据框?

Chr*_*her 2 r transformation reshape dataframe dplyr

执行函数后,我有以下数据结构:

      A       B       C        D        E       
      92.08   90.68   54.09    92.87    97.40    

      F       G       H        I        J       ...       
      24.52   67.24   15.63    22.33    45.10   ...  
Run Code Online (Sandbox Code Playgroud)

作为最终结果,我希望将数据放在一个简单的数据框中,将字母作为行和值放在一列中.以下工作,虽然我很好奇这是否是最优雅的方式(?):

output <- data.frame(output)
output <- data.frame(rownames(output), rowSums(output))
colnames(output) <- c("Category", "Value")
output
output %>% arrange(desc(output))
Run Code Online (Sandbox Code Playgroud)

如果你有想法让它变得更好,请随时纠正我. dplyr解决方案赞赏

谢谢!

Jaa*_*aap 6

正如@Axeman在评论中所说,你有一个命名向量.将其转换为数据帧的最简单方法是使用stack基数R 的-function.

一些示例数据:

output <- setNames(c(92.08,90.68,54.09,92.87,97.40), LETTERS[1:5])
Run Code Online (Sandbox Code Playgroud)

看起来像:

> output
    A     B     C     D     E 
92.08 90.68 54.09 92.87 97.40
Run Code Online (Sandbox Code Playgroud)

转换为数据框:

df <- stack(output)
Run Code Online (Sandbox Code Playgroud)

这使:

> df
  values ind
1  92.08   A
2  90.68   B
3  54.09   C
4  92.87   D
5  97.40   E
Run Code Online (Sandbox Code Playgroud)

要获取问题中指定的列名和列顺序,请执行以下操作:

df <- setNames(stack(output)[2:1], c('Category','Value'))
Run Code Online (Sandbox Code Playgroud)

这使:

  Category Value
1        A 92.08
2        B 90.68
3        C 54.09
4        D 92.87
5        E 97.40
Run Code Online (Sandbox Code Playgroud)