2016-04-23 48 views
0

我想從數據集創建一個包含單詞和單詞頻率的列表。我做到了,並保存在名爲「mylist」的val中。現在我想根據單詞的頻率對列表進行排序,並從具有較高頻率的10個單詞中創建條形圖。無法對列排序R

但我沒有成功排序。我嘗試了很多方法來將「mylist」的類型更改爲data.frame或date.table,但仍保留列表的頻率列。 爲了總結我有包含它的DT var是一個有2列的列表x-包含字和類型是字符。 第2列是'v' - 包含頻率,它是一個列表。 我沒有成功按頻率排序。 請幫助我。

library(ggplot2) 
libary(MASS) 
#get the data 
data.uri = "http://www.crowdflower.com/wp-content/uploads/2016/03/gender-classifier-DFE-791531.csv" 
pwd = getwd() 
data.file.name = "gender.csv" 
data.file = paste0(pwd, "./", data.file.name) 
download.file(data.uri, data.file) 
data = read.csv(data.file.name) 

#manipulate the data 
data <- data[data$X_unit_id < 815719694,] 
print(data$X_unit_id) 

#get all female has white sidebar 
female_colors <- subset(data, data$gender=="female") 
female_colors$fav_number 
#get all male fav_numbers 
male_colors <- subset(data, data$gender=="male") 
male_colors$fav_number 


text_male = subset(data, data$gender=="male") 
text_male = text_male$text 
print(text_male[1]) 
print(length(text_male)) 
v <- text_male[1:length(text_male)] 
print(v) 
print (v[1]) 
count_of_list = 0; 
x = list() 
for (i in v) { 
    # Merge the two lists. 
    x <- c(x,unlist(strsplit(i," "))) 
} 
count = 0; 
mylist = list() 
for (word in x){ 
    for (xWord in x){ 
    if (word == xWord) 
     count = count + 1; 
    } 
    key <- word 
    value <- count 
    mylist[[ key ]] <- value 
    count = 0; 
} 
libary(data.table) 
require(data.table) 
DT = data.table(x=c(names(mylist)),v=c(mylist)) 
DT 
+0

您能否提供一個最簡單的例子,即只有數據集(例如dput())和您試圖對其進行排序的代碼?這太難以解決了。編輯:如果你需要一些幫助,[這裏是一個很好的指導,做一個最小的,可重複的例子](http://stackoverflow.com/a/5963610/5805670)。 – Laterow

回答

0

正如評論中所建議的那樣,一個可重複的例子在創建一個可以幫助你的答案時很有用。無論如何,我會提出建議。嘗試將這種操作適應你的數據。

轉換列表的數據幀,並使用order

df <- as.data.frame(your.data) 

df <- data.frame(id = c("B", "A", "D", "C"), y = c(6, 8, 1, 5)) 
df 

    id y 
1 B 6 
2 A 8 
3 D 1 
4 C 5 

df2 <- df[order(df$id), ] 
df2 

    id y 
2 A 8 
1 B 6 
4 C 5 
3 D 1 
+0

此解決方案適用於您的案例嗎? – Worice

0

它看起來像您使用的是麻煩的方式來計算字數,這樣的事情是更快,更簡單 -

library(dplyr) 
foo <- c("ant", "ant", "bat", "dog","egg","ant","bat") 
bar <- rnorm(7, 5, 2) 
df <- data.frame(foo, bar) 
group_by(df, foo) %>% summarise(n = n()) %>% arrange(desc(n)) 


foo  n 
    (fctr) (int) 
1 ant  3 
2 bat  2 
3 dog  1 
4 egg  1