2013-05-04 9 views
5

मेरे पास पक्षियों के 40 जोड़े हैं जो प्रत्येक पुरुष और मादा के साथ अपने रंग के लिए स्कोर करते हैं। रंग स्कोर 1 से 9 तक की मान रेंज के साथ एक स्पष्ट चर है। मैं प्रत्येक संयोजन की संख्या (1/1, 1/2, 1/3, ... 9/7, 9 के साथ एक टेबल बनाना चाहता हूं/8, 9/9)। मेरी समस्या यह है कि कुछ संयोजन हैं जो मेरे डेटा में मौजूद नहीं होते हैं जब मैं तालिका बनाने की कोशिश करता हूं (इन मामलों में मुझे लापता मूल्यों के लिए शून्य चाहिए)। नीचे डेटा और नमूना कोड है। मुझे पूरा यकीन है कि उत्तर 'expand.grid()' कमांड का उपयोग करने में निहित है, उदा। यह post देखें, लेकिन मुझे यकीन है कि इसे कैसे कार्यान्वित किया जाए। कोई सुझाव?आर में तालिका में लापता मूल्य कैसे बनाएं?

## 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

तुम बस table कॉल करने से पहले अपने Pair_Colours एक सभी आवश्यक स्तर के साथ 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 

आप एक as.data.frame साथ परिवर्तित कर सकते हैं अगर आप प्रारूप "combn1, combn2 होना चाहता हूँ, आवृत्ति "।

+0

+1 बहुत अच्छा क्योंकि यह आसान है। मैं 'expand.gird' के बारे में सोच रहा था। मुझे कॉफी की जरुरत हे। –

संबंधित मुद्दे