如何在R语言中合并含嵌套变量的两个调查数据变量(满足特定计数规则)
在R中按自定义规则合并含嵌套变量的调查数据
先理清楚你的需求和规则:
你的数据与预期目标
现有两个变量的计数结果:
- Var 1:0的计数1056,1的计数542,NA的计数3300
- Var 2:0的计数710,1的计数52,NA的计数4136
期望生成的Var 3计数:
- Var 3:0的计数1766(1056+710),1的计数594(542+52),NA的计数2538
自定义计算规则
- Var 3中
0(或False)的计数 = Var 1和Var 2中0的计数之和 - Var 3中
1(或True)的计数 = Var 1和Var 2中1的计数之和 - Var 3中的NA计数 = Var 1的NA计数 - Var 2的NA计数
解决方案(针对嵌套变量+自定义规则)
你说直接求和得不到结果,核心问题是其中一个变量是嵌套结构,得先把嵌套的部分展开,再按规则处理。我分步骤给你写代码:
第一步:处理嵌套变量
首先用tidyr包的unnest()函数把嵌套列展开,确保两个变量的观测是一一对应的。假设你的数据框叫survey_df,嵌套列是var2:
library(tidyverse) # 展开嵌套列,替换cols里的变量名为你的嵌套列名 survey_df_unnested <- survey_df %>% unnest(cols = c(var2))
第二步:统计两个变量的各类取值计数
先把Var1和Var2的0、1、NA的数量统计出来,方便后续计算:
# 统计Var1的各类计数 count_var1 <- list( zero = sum(survey_df_unnested$var1 == 0, na.rm = TRUE), one = sum(survey_df_unnested$var1 == 1, na.rm = TRUE), na = sum(is.na(survey_df_unnested$var1)) ) # 统计Var2的各类计数 count_var2 <- list( zero = sum(survey_df_unnested$var2 == 0, na.rm = TRUE), one = sum(survey_df_unnested$var2 == 1, na.rm = TRUE), na = sum(is.na(survey_df_unnested$var2)) )
第三步:计算Var3的目标计数并生成变量
根据你的规则计算目标数量,然后生成符合该计数的Var3变量:
# 计算Var3的目标计数 target_counts <- list( zero = count_var1$zero + count_var2$zero, one = count_var1$one + count_var2$one, na = count_var1$na - count_var2$na ) # 生成Var3变量(注意如果na的计数为负,这里会报错,需要检查规则或调整) var3 <- c( rep(0, target_counts$zero), rep(1, target_counts$one), rep(NA, target_counts$na) ) # 把Var3加入展开后的数据集 survey_df_unnested$var3 <- var3
注意事项
- 如果嵌套变量是按分组嵌套的(比如每个受访者对应多个Var2值),你可能需要先按分组统计计数,再合并,而不是直接展开所有观测。
- 检查NA计数的差值:如果
count_var1$na - count_var2$na是负数,生成NA的时候会报错,这时候你需要确认规则是否正确,或者调整逻辑(比如用总观测数减去0和1的计数来得到NA数量,这样更合理,毕竟总观测数是固定的)。 - 如果你需要逐行生成Var3(而不是基于计数生成),当前的规则存在歧义(比如当Var1是0、Var2是1时,Var3该取什么),这时候你需要明确冲突场景的处理逻辑,比如优先取0,或者取1,再用
case_when()实现:
# 逐行生成Var3的示例(假设冲突时优先取0) survey_df_unnested <- survey_df_unnested %>% mutate(var3 = case_when( var1 == 0 | var2 == 0 ~ 0, var1 == 1 & var2 == 1 ~ 1, # 这里按NA规则调整,比如只有Var1是NA且Var2不是NA时设为NA is.na(var1) & !is.na(var2) ~ NA_real_, TRUE ~ NA_real_ # 其他情况根据规则调整 ))
内容的提问来源于stack exchange,提问作者Qregty
相关产品推荐
相关产品推荐

