首页 > 解决方案 > 转置一个df,每行作为R中的一列

问题描述

使用 dplyr 我想转置下面的数据框。

我使用 : t() 但它没有将我的列名注册为列。另外,我想命名列

df <- structure(list(anger = 4083, anticipation = 7023, disgust = 2551, 
    fear = 6983, joy = 4316, negative = 9234, positive = 17198, 
    sadness = 3690, surprise = 2996, trust = 11146), row.names = c(NA, 
-1L), class = c("tbl_df", "tbl", "data.frame"))

最好按计数排列。

**sentiment        count**
anger             4083
anticipation      7023
disgust           2551
fear              6983
joy               4316
negative          9234
positive         17198
sadness           3690
surprise          2996
trust            11146

标签: rdplyr

解决方案


我们可以用pivot_longer()

library(dplyr)
library(tidyr)
df %>% 
   pivot_longer(everything(), names_to = 'sentiment', values_to = 'count') %>% 
   arrange(count)
# A tibble: 10 x 2
#   sentiment    count
#   <chr>        <dbl>
# 1 disgust       2551
# 2 surprise      2996
# 3 sadness       3690
# 4 anger         4083
# 5 joy           4316
# 6 fear          6983
# 7 anticipation  7023
# 8 negative      9234
# 9 trust        11146
#10 positive     17198

或与gather

gather(df, sentiment, count)

或使用meltfromdata.table

library(data.table)
melt(setDT(df), variable.name = 'sentiment', measure.vars = names(df),
           value.name = 'count')[order(count)]

flattenenframe

library(tibble)
library(purrr)
flatten(df) %>% 
      enframe %>%
      unnest(c(value))

base R,我们可以使用stack

stack(df)[2:1]

推荐阅读