如何用R单行代码实现含M与y的b1和b2交叉表?
问题:用R语言单行代码实现指定交叉制表需求
原始数据集
y b1 b2 M 1 143 1 1 B 2 152 2 1 D 3 199 3 1 A 4 155 4 1 C 5 161 1 2 D 6 166 2 2 B 7 198 3 2 C 8 195 4 2 A 9 193 1 3 A 10 154 2 3 C 11 151 3 3 B 12 150 4 3 D 13 160 1 4 C 14 176 2 4 A 15 159 3 4 D 16 120 4 4 B
需求说明
按b1和b2做交叉制表,每个单元格要包含M和y的组合,预期效果如下:
b2 1 2 3 4 1 B 143 D 161 A 193 C 160 b1 2 D 152 B 166 C 154 A 176 3 A 199 C 198 B 151 D 159 4 C 155 A 195 D 150 B 120
解决方案
当然可以用单行R代码实现,这里提供两种方案:
方案1:依赖reshape2包(简洁直观)
先确保安装了reshape2包,然后运行:
library(reshape2); dcast(df, b1 ~ b2, value.var = c("M", "y"), fun.aggregate = function(x) paste(x[1], x[2]))
方案2:基础R实现(无需额外包)
直接用tapply函数就能搞定:
with(df, tapply(paste(M, y), list(b1, b2), identity))
两种方案都会生成符合需求的交叉表,单元格内容为M和y的组合字符串,和示例格式一致。
内容的提问来源于stack exchange,提问作者Vivek Sharma
相关产品推荐
相关产品推荐

