在R中基于VAR3=101构建以VAR4为值的VAR1-VAR2矩阵
生成指定条件的2×2矩阵
给定数据框df,结合预期输出来看,实际需求是提取**VAR3为101(对应VAR2=10)和104(对应VAR2=20)**的行,构造行对应VAR1取值、列对应VAR2取值、单元格为VAR4数值的2×2矩阵。以下是具体实现方法:
步骤1:筛选目标数据
先从原数据框中挑出符合条件的行:
df_sub <- df[df$VAR3 %in% c(101, 104), ]
步骤2:构造目标矩阵
方法1:Base R 原生实现
用tapply()函数直接按VAR1和VAR2分组提取VAR4值,生成矩阵:
result_mat <- tapply(df_sub$VAR4, list(df_sub$VAR1, df_sub$VAR2), FUN = identity)
方法2:tidyr 包宽格式转换(更直观)
先将长格式数据转为宽格式,再转为矩阵:
library(tidyr) # 转换为宽格式数据框 wide_df <- spread(df_sub, key = VAR2, value = VAR4) # 提取数值部分转为矩阵并设置行名 result_mat <- as.matrix(wide_df[, -1]) rownames(result_mat) <- wide_df$VAR1
运行后得到的矩阵与预期一致:
10 20 1 58 200 2 108 72
内容的提问来源于stack exchange,提问作者vp_050
相关产品推荐
相关产品推荐

