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
解决方案赞赏
谢谢!
正如@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)
看起来像:
Run Code Online (Sandbox Code Playgroud)> output A B C D E 92.08 90.68 54.09 92.87 97.40
转换为数据框:
df <- stack(output)
Run Code Online (Sandbox Code Playgroud)
这使:
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
要获取问题中指定的列名和列顺序,请执行以下操作:
df <- setNames(stack(output)[2:1], c('Category','Value'))
Run Code Online (Sandbox Code Playgroud)
这使:
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