0

我有一个这样的数据框:

   Var1   Var2 Freq
1  1970 sigmod   28
2  1971 sigmod   21
3  1972 sigmod   21
4  1974 sigmod   36
5  1975 sigmod   46
6  1976 sigmod   21
7  1977 sigmod   32
8  1978 sigmod   45
9  1979 sigmod   24
10 1980 sigmod  102
...

当我绘制图表时,我收到了这个:

在此处输入图像描述

我尝试了这些代码,但情节没有变化:

plot(tab$Var1, tab$Freq, type="b")
plot(tab$Var1, tab$Freq, type="b", lty=2, pch=17)

请告诉我原因,以及如何解决它。谢谢你。

4

3 回答 3

2

看起来好像您tab是使用as.data.frame(table(...)))or创建的data.frame(table(...))

as.data.frame.table并将data.frame(table(...))强制 dimnames 为factor.

# an example
foo <- data.frame(a = sample(10,size=100,replace=TRUE),b = sample(10, size = 50, replace = TRUE))

str(data.frame(table(foo))
# 'data.frame': 100 obs. of  3 variables:
#  $ a   : Factor w/ 10 levels "1","2","3","4",..: 1 2 3 4 5 6 7 8 9 10 ...
#  $ b   : Factor w/ 10 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 1 1 ...
# $ Freq: int  1 2 2 2 3 0 4 0 0 0 ..

str(as.data.frame(table(foo))
# 'data.frame': 100 obs. of  3 variables:
#  $ a   : Factor w/ 10 levels "1","2","3","4",..: 1 2 3 4 5 6 7 8 9 10 ...
#  $ b   : Factor w/ 10 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 1 1 ...
# $ Freq: int  1 2 2 2 3 0 4 0 0 0 ..

您可以使用reshape2创建频率表表,这将保留变量的类型

library(reshape2)
str(dcast(a+b~'Freq',data = foo,value.var = 'b', fun = length))
# 'data.frame': 56 obs. of  3 variables:
#  $ a   : int  1 1 1 1 1 1 1 1 2 2 ...
#  $ b   : int  1 2 3 5 6 7 8 10 1 2 ...
#  $ Freq: int  1 1 2 4 2 2 1 2 2 5 ...

或使用data.table

 library(data.table)
 DT <- data.table(foo)
 str(DT[, .N, by = list(a,b)])
# Classes ‘data.table’ and 'data.frame':    56 obs. of  3 variables:
#  $ a: int  1 4 5 10 2 1 5 4 4 7 ...
#  $ b: int  5 6 1 3 2 6 4 4 5 1 ...
#  $ N: int  4 1 3 1 5 2 3 3 1 4 ...
#  - attr(*, ".internal.selfref")=<externalptr> 
于 2013-09-04T03:15:29.617 回答
1

上面的解决方案是正确的,频率是一个因素,但你希望它是一个数字。

尝试这个:

freq=as.numeric(tab$Freq);head(freq)
## if the above does not work properly (show the exact same values); this should
freq=as.numeric(as.character(tab$Freq));head(freq)
plot(tab$Var1, freq, type="b", lty=2, pch=17)

让我们知道这是否不起作用(频率和情节看起来如何)。

于 2013-09-04T04:34:36.130 回答
0

问题解决了。我使用了这个: year = as.numeric(as.character(tab$Var1)) 然后绘制图表: plot(year, tab$Freq, type="b") 感谢@mnel 和@Sahil Seth 的回答。(对不起,我要等8个小时才能告知答案^^)

于 2013-09-04T13:51:18.417 回答