【发布时间】:2018-02-08 10:40:51
【问题描述】:
我正在使用以下代码创建一个包含两个分类变量的交叉表:
library(dplyr)
library(reshape2)
T1.1<-table(data$Q7_1,data$Q9,exclude = NULL)
T1.1<-data.frame(T1.1)
T1.2<-dcast(T1.1, Var1~Var2)
T1.2<-T1.2%>%mutate(Industry=as.character(Var1),Total_responses=A+B+C)%>%select(Industry,A,B,C,Total_responses)
C<-c("Industry"="ALL", colSums(T1.2[,2:5]))
T1.2<-rbind(C,T1.2)
这给出了输出:
Industry A B C Total_responses
1 ALL 20 18 18 56
2 Banking/Financial Services 2 2 2 6
3 Chemicals 0 1 2 3
4 Consumer Goods 1 1 1 3
5 Energy 2 1 0 3
6 High Tech 6 0 2 8
7 Insurance/Reinsurance 0 2 0 2
8 Life Sciences 0 0 0 0
9 Logistics 0 0 2 2
10 Mining & Metals 1 1 1 3
11 Other Manufacturing 1 2 0 3
12 Other Non-Manufacturing 3 2 2 7
13 Retail & Wholesale 1 1 0 2
14 Services (Non-Financial) 2 4 5 11
15 Transportation Equipment 1 1 1 3
16 <NA> 0 0 0 0
这个输出没问题,但问题是在我使用 table() 函数之后,我将它转换为数据框,然后使用 dcast 来获得所需的表格外观。在 dcast 之后,它会创建另一列 NA,这是我不想要的。
我还想使用整个计算来创建一个函数,我可以将其用于具有更多级别的其他因素。
Q9 有 3 个级别 A、B 和 C,我不想像这样计算总响应,我想创建可以与具有不同级别数的任何其他因素一起使用的函数。请提出任何其他有效的方法。
> dput(data)
structure(list(Q7_1 = structure(c(5L, 5L, 14L, 1L, 9L, 13L, 1L,
3L, 13L, 13L, 13L, 12L, 2L, 11L, 13L, 10L, 11L, 1L, 4L, 5L, 5L,
4L, 5L, 9L, 2L, 4L, 13L, 10L, 13L, 13L, 11L, 1L, 11L, 5L, NA,
1L, 9L, 3L, 1L, 5L, NA, 2L, NA, 6L, 14L, NA, NA, 14L, 8L, 11L,
8L, 12L, 13L, NA, 3L, 11L, 11L, NA, 10L, 6L, 5L, 13L, 13L), .Label = c("Banking/Financial Services",
"Chemicals", "Consumer Goods", "Energy", "High Tech", "Insurance/Reinsurance",
"Life Sciences", "Logistics", "Mining & Metals", "Other Manufacturing",
"Other Non-Manufacturing", "Retail & Wholesale", "Services (Non-Financial)",
"Transportation Equipment"), class = "factor"), Q9 = structure(c(1L,
3L, 3L, 3L, 3L, 1L, 1L, 3L, 2L, 2L, 3L, 2L, 3L, 2L, 2L, 2L, 1L,
3L, 1L, 1L, 1L, 2L, 1L, 2L, 3L, 1L, 1L, 1L, 3L, 3L, 3L, 2L, 2L,
1L, NA, 1L, 1L, 2L, 2L, 1L, NA, 2L, NA, 2L, 2L, NA, NA, 1L, 3L,
1L, 3L, 1L, 3L, NA, 1L, 3L, 1L, NA, 2L, 2L, 3L, 3L, 2L), .Label = c("A",
"B", "C"), class = "factor")), class = c("data.table", "data.frame"
), row.names = c(NA, -63L), .Names = c("Q7_1",
"Q9"))
>
【问题讨论】:
-
您能否展示一下您当前的结果是什么,从您发布的当前代码中得到什么以及您想要的输出是什么?还请演示您当前的代码如何不足。不清楚你在问什么? (另外,你应该从你的
structure中删除, .internal.selfref = <pointer: 0x0000000000100788>,,这会给不使用你计算机的人带来问题。 -
另外,请完成您的代码,添加您使用的所有库。
-
我已经编辑了这个问题,希望现在更好
标签: r function dataframe crosstab