2013-05-04 13 views
5

私は40組の鳥を持っていますが、それぞれの男性と女性は色が合っています。色スコアは1〜9の値域を持つカテゴリ変数です。各組み合わせの数(1/1、1/2、1/3、... 9/7、9)の表を作成したいと思います。/8,9/9)。私の問題は、テーブルを作成しようとすると、自分のデータに存在しないいくつかの組み合わせがあることです(これらの場合、欠損値がゼロになります)。以下はデータとサンプルコードです。私は答えが 'expand.grid()'コマンドを使うことにあると確信しています。これを参照してくださいpost、しかし私はそれを実装する方法が不明です。助言がありますか?Rのテーブルに欠損値を作成するには?

## Dataset pairs of males and females and their colour classes 
Pair_Colours <- structure(list(Male = c(7, 6, 4, 6, 8, 8, 5, 6, 6, 8, 6, 6, 5, 
7, 9, 5, 8, 7, 5, 5, 4, 6, 7, 7, 3, 6, 5, 4, 7, 4, 3, 9, 4, 4, 
4, 4, 9, 6, 6, 6), Female = c(9, 8, 8, 9, 3, 6, 8, 5, 8, 9, 7, 
3, 6, 5, 8, 9, 7, 3, 6, 4, 4, 4, 8, 8, 6, 7, 4, 2, 8, 9, 5, 6, 
8, 8, 4, 4, 5, 9, 7, 8)), .Names = c("Male", "Female"), class = "data.frame", row.names = c(NA, 
40L)) 

Pair_Colours$Male <- as.factor(Pair_Colours$Male) 
Pair_Colours$Female <- as.factor(Pair_Colours$Female) 

## table of pair colour values (colours 1 to 9 - categoricial variable) 
table(Pair_Colours$Male, Pair_Colours$Female) 

## my attempt to create a table with a count of each possible value for pairs 
Colour_Male <- rep(seq(1, 9, by = 1), each = 9) 
Colour_Female <- rep(seq(1, 9, by = 1), times = 9) 
Colour_Count <- as.vector(table(Pair_Colours$Male, Pair_Colours$Female)) # <- the problem occurs here 
Pairs_Colour_Table <- as.data.frame(cbind(cbind(Colour_Male, Colour_Female), Colour_Count)) 

## plot results to visisually look for possible assortative mating by colour 
op<-par(mfrow=c(1,1), oma=c(2,4,0,0), mar=c(4,5,1,2), pty = "s") 
plot(1,1, xlim = c(1, 9), ylim = c(1, 9), type="n", xaxt = "n", yaxt = "n", las=1, bty="n", cex.lab = 1.75, cex.axis = 1.5, main = NULL, xlab = "Male Colour", ylab = "Female Colour", pty = "s") 
axis(1, at = seq(1, 9, by = 1), labels = T, cex.lab = 1.5, cex.axis = 1.5, tick = TRUE, tck = -0.015, lwd = 1.25, lwd.ticks = 1.25) 
axis(2, at = seq(1, 9, by = 1), labels = T, cex.lab = 1.5, cex.axis = 1.5, tick = TRUE, tck = -0.015, lwd = 1.25, lwd.ticks = 1.25, las =2) 
points(Pair_Colours$Male, Pair_Colours$Female, pch = 21, cex = Pairs_Colour_Table$Colour_Count, bg = "darkgray", col = "black", lwd = 1) 

答えて

4

あなたは自分のPair_Colourstableを呼び出す前に、必要なすべてのレベルでfactorに変換する必要があります。

# Convert each column to factor with levels 1 to 9 
Pair_Colours[] <- lapply(Pair_Colours, factor, levels=1:9) 
table(Pair_Colours$Male, Pair_Colours$Female) 
#  1 2 3 4 5 6 7 8 9 
# 1 0 0 0 0 0 0 0 0 0 
# 2 0 0 0 0 0 0 0 0 0 
# 3 0 0 0 0 1 1 0 0 0 
# 4 0 1 0 3 0 0 0 3 1 
# 5 0 0 0 2 0 2 0 1 1 
# 6 0 0 1 1 1 0 3 3 2 
# 7 0 0 1 0 1 0 0 3 1 
# 8 0 0 1 0 0 1 1 0 1 
# 9 0 0 0 0 1 1 0 1 0 

あなたはフォーマットが「combn1、combn2になりたい場合は、as.data.frameに変換することができ、周波数"。

+0

+1とてもシンプルなのでとてもいいです。私は 'expand.gird'について考えていました。私はコーヒーが必要。 –