r - 如何在R中的表中创建缺失值?

标签 r frequency missing-data

我有 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)

最佳答案

您只需要转换您的 Pair_Coloursfactor在调用之前提供所有要求的级别 table :

# 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、频率”。

关于r - 如何在R中的表中创建缺失值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16372462/

相关文章:

r - 根据组缩放所有值

r - 为 Shiny 的服务器加载 R Environment.RData

r - 使用 knitr 创建 HTML 幻灯片,仅输出 R 代码

r - R 中的多个轮廓图

r - 在 data.table v1.8.10 vs v1.9.2 中对非常小的数字(例如 1e-28)和 0.0 进行分组

android - 将实时音频与Android中录制的音频进行比较

用空白替换日期列中的 NA

java - 我需要帮助以这种特定方式根据频率对 java 中的数组进行排序

algorithm - 预先计算订单时的线性时间复杂度排序算法

r - 如何删除一列中超过 2 个连续的 NA?