问题描述
我正在尝试使用 expss 将重新编码为函数。当我复制 https://gdemin.github.io/expss/#example_of_data_processing_with_multiple-response_variables 中所示的示例时 我注意到以下行为: 包含 do_if 语句的代码完美运行:
w = w %>% do_if(cell == 1,{recode(a1_1 %to% a1_6,other ~ copy) %into% (h1_1 %to% h1_6)})
没有 do_if 语句
w = w %>% recode(a1_1 %to% a1_6,other ~ copy) %into% (h1_1 %to% h1_6)
这是正确的吗?
将变量标签转移到新创建的变量(参见 mutate)也很好
感谢您提供有关如何正确使用的建议。
解决方法
Inside do_if
recode
在 data.frame 的上下文中进行评估。当没有上下文时,recode
将在全局环境中进行评估。它在 data.frame 中看不到 a1_1,... 变量。
好消息是有一个 compute
函数可用于对 data.frames 进行任意操作:
w = w %>%
compute({
recode(a1_1 %to% a1_6,other ~ copy) %into% (h1_1 %to% h1_6)
})
至于标签复制,您可以使用参数 'with_labels' = TRUE 或默认情况下具有 'with_labels' = TRUE 的别名 'rec':
w = w %>%
compute({
rec(a1_1 %to% a1_6,other ~ copy) %into% (h1_1 %to% h1_6)
})