冲着楼主 给我的500金币。
我就再认真点, 呵呵,
把严格意思上的 交叉分组表 试试搞出来,再分行百分频数与列百分频数。
data.frame(sex=c(1,1,2,2,1,1,2,1), bq=c(2,2,2,1,2,2,1,2))
交叉表为:
bq
sex 1 2 total
1 0 5 5
2 2 1 3
total 2 6 8
a <- data.frame(sex=c(1,1,2,2,1,1,2,1), bq=c(2,2,2,1,2,2,1,2))
levels(a$bq) <- c("1","2","total") #增加total因子,子集sex1,sex2,bq数据转换total
sex1 <- subset(a, sex == "1")
sex2 <- subset(a, sex == "2")
sex1$bq <- c("total")
sex2$bq <- c("total")
levels(a$sex) <- c("1", "2","total") #增加total因子,子集bq1,bq2, sex 数据转换为total
bq1 <- subset(a, bq =="1")
bq2 <- subset(a, bq =="2")
bq1$sex <- c("total")
bq2$sex <- c("total")
asb <- a #所以的a 数据都变为total
asb$sex <- c("total")
asb$bq <- c("total")
atotal <-rbind(a, sex1, sex2, bq1, bq2,asb) #组建新的数据框
table(atotal)
如果要行百分频数
m <- table(atotal)
m1 <- m[-3,1]/m[-3,3]
m2 <- m[-3,2]/m[-3,3]
m[-3,1] <- paste(m[-3,1],"(",round(100*m1,2),"%)",sep="")
m[-3,2] <- paste(m[-3,2],"(",round(100*m2,2),"%)",sep="")
m
bq
sex 1 2 total
1 0(0%) 5(100%) 5
2 2(66.67%) 1(33.33%) 3
total 2 6 8
如果要列百分数
m <- table(atotal)
mr1 <- m[1,-3]/m[3,-3] #列百分频数
mr2 <- m[2,-3]/m[3,-3]
m[1,-3] <- paste(m[1, -3],"(",round(100*mr1,2),"%)",sep="")
m[2,-3] <- paste(m[2,-3],"(",round(100*mr2,2),"%)",sep="")
m
bq
sex 1 2 total
1 0(0%) 5(83.33%) 5
2 2(100%) 1(16.67%) 3
total 2 6 8