gpt4 book ai didi

r - "superimpose"R 中的计数表和百分比表

转载 作者:行者123 更新时间:2023-12-04 05:14:05 24 4
gpt4 key购买 nike

下面的脚本说明了我的问题:

library(reshape2)

set.seed(1)
dummy.df <- data.frame(var_a=sample(letters[1:5],200,replace=TRUE),
var_b=sample(1:5,200,replace=TRUE),
stringsAsFactors=FALSE)

temp1 <- addmargins(table(dummy.df[,c("var_a","var_b")]),1)
temp2 <- formatC(addmargins(prop.table(table(dummy.df[,c("var_a","var_b")]),2),1)*100,digits=2,format="f")

temp1.melt <- melt(temp1,id.vars="var_a")
temp2.melt <- melt(temp2,id.vars="var_a")

temp.output <- merge(temp1.melt,temp2.melt,by=c("var_a","var_b"))
temp.output[,"value"] <- paste(temp.output[,"value.x"]," (",temp.output[,"value.y"],"%)",sep="")
temp.output[,"var_a"] <- factor(temp.output[,"var_a"],levels=c("a","b","c","d","e","Sum"))
temp.output <- dcast(temp.output,formula=var_a~var_b,value.var="value")

我在办公室通常的工作之一是创建列出不同变量之间频率的表格,通常我也会在表格中包含百分比(行/列百分比)。

才知道功能 addmargins , prop.tableas.data.frame.matrix , 我用了很多 meltdcast来自 reshape2包来解决这个问题(即将表转换为数据帧, melt 它,做适当的除法以给出百分比,然后 dcast 它)。现在我知道使用三个新的学习函数可以为我节省大量代码。

现在我想知道这是否可以向前移动一步,而不使用我上面提供的脚本,并创建一个表,在实际计数旁边显示行/列百分比?

最佳答案

如果列数为 N,则这需要两个表并重新排列。既然您已经弄清楚了列的重命名,我就不会让您感到厌烦:

 temp12 <- cbind(temp1, temp2)
stopifnot( ncol(temp1) == ncol(temp2))
data.frame( var_a=rownames(temp1), temp12[ ,c(t(matrix(1:10, 5,2))) ] )
#-----
var_a X1 X1.1 X2 X2.1 X3 X3.1 X4 X4.1 X5 X5.1
a a 7 15.22 9 18.75 7 17.07 4 14.29 2 5.41
b b 13 28.26 12 25.00 6 14.63 5 17.86 9 24.32
c c 9 19.57 9 18.75 9 21.95 3 10.71 13 35.14
d d 9 19.57 9 18.75 8 19.51 12 42.86 10 27.03
e e 8 17.39 9 18.75 11 26.83 4 14.29 3 8.11
Sum Sum 46 100.00 48 100.00 41 100.00 28 100.00 37 100.00

(您可以使用相同的矩阵转置技巧从构造列名称的两个附加向量中进行选择。)

关于r - "superimpose"R 中的计数表和百分比表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14514083/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com