2017-07-30 20 views
1

我想收集/融化沒有鍵的值,最終輸出值。所有值都應該結尾成一列。tidyr/data.table:僅收集/融化值,丟棄鍵

library(tidyverse) 
library(tidytext) 

data <- get_sentiments("nrc") 

我看起來像這樣工作的數據: nrc_wide < - dcast(NRC,字〜情緒)

# 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 

我已經嘗試過許多收集和融化選項,但這不是關鍵的數值格式。

回答

4

一個正常的tidyr::gather操作應該做的,除非你需要1)使用na.rm = TRUE刪除NAs; 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 
+1

美麗!謝謝! – Monduiz