tidyr/data.table: gather/melt 仅值,丢弃键

tidyr/data.table: gather/melt only values, discard keys

我想要 gather/melt 一个没有键值最终输出的数据框。所有值都应在一列中结束。

library(tidyverse)
library(tidytext)

data <- get_sentiments("nrc")

我处理的数据如下所示: nrc_wide <- dcast(nrc, word ~ sentiment)

# sample output:

         word anger anticipation disgust fear  joy negative positive 
1      abacus  <NA>         <NA>    <NA> <NA> <NA>     <NA>     <NA>    
2     abandon  <NA>         <NA>    <NA> fear <NA> negative     <NA> 
3   abandoned anger         <NA>    <NA> fear <NA> negative     <NA> 
4 abandonment anger         <NA>    <NA> fear <NA> negative     <NA> 

我想把它变成原来的样子:

     word sentiment
     <chr>     <chr>
1    abacus     trust
2   abandon      fear
3   abandon  negative
4   abandon   sadness

我尝试了很多收集和熔化选项,但这不是键值格式。

正常的tidyr::gather操作应该可以,除非你需要1)用na.rm = TRUE删除NA; 2)在重塑时排除 word 列,使其保留; 3) 在:

之后删除键列
library(tidyverse)
nrc_wide %>% 
    gather(key, sentiment, -word, na.rm = T) %>% 
    select(-key) %>% 
    arrange(word) %>% 
    head

#       word sentiment
#1    abacus     trust
#2   abandon      fear
#3   abandon  negative
#4   abandon   sadness
#5 abandoned     anger
#6 abandoned      fear

使用data.table::melt:

library(data.table)
melt(setDT(nrc_wide), id.vars = "word", na.rm = TRUE)[, 
    .(word, sentiment = value)
][order(word)]

#            word    sentiment
#    1:    abacus        trust
#    2:   abandon         fear
#    3:   abandon     negative
#    4:   abandon      sadness
#    5: abandoned        anger
#   ---                       
#13897:      zest anticipation
#13898:      zest          joy
#13899:      zest     positive
#13900:      zest        trust
#13901:       zip     negative