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

时间:2017-11-26 10:33:14

标签: r dataframe dplyr transformation reshape

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

public static void Main(string[] args)
        {
            int size=20;
            for(int i=0;i<size;i++){
                for(int j=0;j<size;j++){
                     if((i+j>=size/2-1 && i<=size/2-1 && j-i<=size/2-1) ||
                        (i==size/5 && j<size-1)||
                        (i-j<=size/5 && j<size/2 && i>size/5)||
                        (i+j<=size+((size-10)/5) && j>=size/2 && i>size/5))
                         Console.Write("*");
                     else
                         Console.Write(" ");
                }
                Console.WriteLine("");
            }
        }

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

      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   ...  

如果你有想法让它变得更好,请随时纠正我。 output <- data.frame(output) output <- data.frame(rownames(output), rowSums(output)) colnames(output) <- c("Category", "Value") output output %>% arrange(desc(output)) 解决方案表示赞赏。

谢谢!

1 个答案:

答案 0 :(得分:5)

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

一些示例数据:

output <- setNames(c(92.08,90.68,54.09,92.87,97.40), LETTERS[1:5])

看起来像:

> output
    A     B     C     D     E 
92.08 90.68 54.09 92.87 97.40

使用以下内容转换为数据框:

df <- stack(output)

给出:

> df
  values ind
1  92.08   A
2  90.68   B
3  54.09   C
4  92.87   D
5  97.40   E

获取问题中指定的列名和列顺序:

df <- setNames(stack(output)[2:1], c('Category','Value'))

给出:

  Category Value
1        A 92.08
2        B 90.68
3        C 54.09
4        D 92.87
5        E 97.40