将列旋转成行

问题描述 投票:1回答:2

我有来自SQL查询的数据,其形状如下:

+-------------+-------------+-------------+-------------+-------------+
| candidate_1 | candidate_2 | candidate_3 | candidate_4 | candidate_5 |
+-------------+-------------+-------------+-------------+-------------+
|          49 |          33 |          19 |          93 |          42 |
+-------------+-------------+-------------+-------------+-------------+

数字代表每个候选人的票数。那我想做什么?我想使用R(我想通过dplyr或tidyr)来旋转此数据,使其看起来像这样:

+-------------+-------+
|  candidate  | votes |
+-------------+-------+
| candidate_1 |    49 |
| candidate_2 |    33 |
| candidate_3 |    19 |
| candidate_4 |    93 |
| candidate_5 |    42 |
+-------------+-------+

在R中完成此操作的最有效方法是什么?

r dplyr tidyverse tidyr
2个回答
1
投票

这里是pivot_longer的一个选项

library(dplyr)
library(tidyr)
df1 %>%
   pivot_longer(cols = everything(), names_to = 'candidate', values_to = 'votes')
# A tibble: 5 x 2
#  candidate   votes
#  <chr>       <dbl>
#1 candidate_1    49
#2 candidate_2    33
#3 candidate_3    19
#4 candidate_4    93
#5 candidate_5    42

或者在base R中,可以通过stack来完成>

stack(df1)[2:1]

或通过转换为table

as.data.frame.table(as.matrix(df1))[,-1]

数据

df1 <- data.frame(candidate_1 = 49, candidate_2 = 33, 
         candidate_3 = 19, candidate_4 = 93, candidate_5 = 42)

0
投票

实际上,您可以使用data.frame + t来制作它,即

© www.soinside.com 2019 - 2024. All rights reserved.