我有一个直接来自文件的单词列表,每行一个,我用read.csv导入,生成data.frame。我需要做的是计算和绘制每个单词的出现次数。那,我可以很容易地做到,但问题是我有几百个单词,其中大多数单词在列表中只出现过一次或两次,所以我对它们不感兴趣。
编辑 https://gist.github.com/anonymous/404a321840936bf15dd2#file-wordlist-csv这是您可以尝试使用的示例词汇表。它与我使用的不一样,我无法分享它,因为它来自实际实验的实际数据,我不允许分享它。出于所有意图和目的,此列表具有可比性。
A"简单"
df <- data.frame(table(words$word))
df[df$Freq > 2, ]
诀窍,我现在有一个出现两次以上的单词列表,以及为什么我必须从data.frame转到数组并返回到data.frame只是一个很难过的问题。要做到这一点,更不用说我必须在实际选择字符串中重复data.frame的名称。完全打败了我。
问题在于,现在过滤后的data.frame对图表无用。假设这是我在过滤后获得的
Var1 Freq
6 aspect 3
24 colour 7
41 differ 18
55 featur 7
58 function 19
81 look 4
82 make 3
85 mean 7
95 opposit 14
108 properti 3
109 purpos 6
112 relat 3
116 rhythm 4
118 shape 6
120 similar 5
123 sound 3
显然,如果我只是做一个
plot(df[df$Freq > 2, ])
我明白了
显然(显然?)在x轴上具有所有原始项,而y轴仅显示过滤值。所以下一个合乎逻辑的步骤是试图强迫R的手
plot(x=df[df$Freq > 2, ]$Var1, y=df[df$Freq > 2, ]$Freq)
但显然R知道最好并且已经做到了,因为我得到了完全相同的结果。使用ggplot2可以获得更好的效果
qplot(x=df[df$Freq > 2, ]$Var1, y=df[df$Freq > 2, ]$Freq)
(为了保持一致性)但是我希望能够显示一个实际的直方图,你知道,有条形,就像他们在六年级教的那些,所以如果我问那个
qplot(x=df[df$Freq > 2, ]$Var1, y=df[df$Freq > 2, ]$Freq) + geom_bar()
我得到了
Error : Mapping a variable to y and also using stat="bin".
With stat="bin", it will attempt to set the y value to the count of cases in each group.
This can result in unexpected behavior and will not be allowed in a future version of ggplot2.
If you want y to represent counts of cases, use stat="bin" and don't map a variable to y.
If you want y to represent values in the data, use stat="identity".
See ?geom_bar for examples. (Defunct; last used in version 0.9.2)
所以让我们试试最后的建议,不管吗?
qplot(df[df$Freq > 2, ]$Var1, stat='identity') + geom_bar()
足够公平,但有我的酒吧?所以,回归基础
qplot(words$word) + geom_bar() # even if geom_bar() is probably unnecessary this time
给了我这个
我是疯了还是[替换一长串关于R的ramblings和投诉?]
答案 0 :(得分:2)
我生成一些随机数据
set.seed(1)
df <- data.frame(Var1 = letters, Freq = sample(1: 8, 26, T))
然后我使用dplyr::filter
,因为它非常快速和简单。
library(ggplot2); library(dplyr)
qplot(data = filter(df, Freq > 2), Var1, Freq, geom= "bar", stat = "identity")
答案 1 :(得分:0)
首先,至少使用plot()
,没有理由强制使用data.frame。 plot()
了解table
个对象。你可以做到
plot(table(words$words))
# or
plot(table(words$words), type="p")
# or
barplot(table(words$words))
我们可以使用Filter
来过滤行,但遗憾的是,它会删除table
类。但我们可以使用as.table
重新添加。这看起来像
plot(as.table(Filter(function(x) x>2, table(words$words))), type="p")