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(...)))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 は要因ですが、数値として使用する必要があります。

これを試して:

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)

これが機能しない場合はお知らせください (freq とプロットがどのように見えるか)。

于 2013-09-04T04:34:36.130 に答える