首页 > 解决方案 > Table() 函数的问题

问题描述

我是 R 新手,需要自学如何在我目前的工作中使用它来完成任务。StackOverflow 上的第一篇文章,所以请原谅我省略了任何重要信息。

我发现我没有正确使用 table() 函数,因为它生成的表不包含所有应包含的值。这是我的代码/输出:

    library(tidyverse)
    library(dplyr)
    cbraw <- read.csv("Cbay.csv")

QS2B = 调查邮政编码

B11 = 具体调查问题

    zipcode_table_B11 = cbraw %>% 
      group_by(QS2B, B11) %>% 
      summarize(n()) %>% 
      table()
    zipcode_table_B11

输出

      B11
QS2B    1 2 3 4 5 8 9
  12064 1 0 0 0 0 0 0
  12115 0 0 0 0 0 0 0
  12116 1 0 0 0 0 0 0
  12155 0 0 1 0 0 0 0

这是 excel 数据(又名 cbraw):

QS2B    B11
12064   1.00
12115   
12116   1.00
12155   1.00
12155   3.00
12155   1.00

QS2B 列有问题,值 12155

现在,请注意 df 上的 12155 的值是 1,3 和 1。但是,我的输出中只计算了“3”。

实际输出:

B11
QS2B    1 2 3 4 5 8 9
  12064 1 0 0 0 0 0 0
  12115 0 0 0 0 0 0 0
  12116 1 0 0 0 0 0 0
  12155 0 0 1 0 0 0 0

期望的输出:

B11
QS2B    1 2 3 4 5 8 9
  12064 1 0 0 0 0 0 0
  12115 0 0 0 0 0 0 0
  12116 1 0 0 0 0 0 0
  12155 2 0 1 0 0 0 0

有谁知道为什么我的表中没有计算 1?

任何帮助将不胜感激!

标签: rdplyr

解决方案


我认为你过于复杂了。table计算出现次数,并以宽格式显示所有可能的组合。group_by() %>% summarize(n())计算出现次数并将结果以长格式显示,仅显示出现的组合。你不需要两者。既然你想要一个“宽”格式的输出,table那就更好了。我想你想要的是这样的:

with(zipcode_table_B11, table(QS2B, B11))

推荐阅读