我有来自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中完成此操作的最有效方法是什么?
这里是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)
实际上,您可以使用data.frame
+ t
来制作它,即