2016-04-23 57 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