首页 > 解决方案 > 在 R 中使用 if_else 从两个不同的变量创建一个变量

问题描述

我正在使用 ACS 数据尝试从两个不同的变量 OCPIP 和 GRPIP 创建一个住房成本负担变量。

我想将那些报告 0 为缺失且任何大于 30 的值设置为“”,将任何值 1-30 设置为“”。这是我的dplyr/Tidyverse代码:

df <- df %>%
  mutate(cost_burdened = if_else(OCPIP == 0 | GRPIP == 0, NA_character_,
                                 if_else(OCPIP < 31 | GRPIP < 31, "No", "Yes")))

我觉得我的设置是从我阅读它的方式开始的,如果 X 或 Y = 0,那么它们就丢失了,如果 X 或 Y 大于 31,那么它们是“”。if_else如果我使用其中一个的确切设置(因此只有 GRPIP 或 OCPIP)创建了两个单独的变量,则代码有效。

但是当我添加|它时它不起作用。它将所有内容都设置为缺失。当我尝试不同的配置时,包括case_when它仍然无法正常工作。

标签: rif-statementvariablesdplyrlogical-operators

解决方案


我不知道是什么导致了你的问题。请参见下面的示例。在这里一切都很好。

library(tidyverse)

set.seed(1111)
n=500
df = tibble(
  OCPIP = sample(0:40, n, replace = TRUE),
  GRPIP = sample(0:40, n, replace = TRUE),
) %>% mutate(cost_burdened = if_else(OCPIP == 0 | GRPIP == 0, NA_character_,
                                     if_else(OCPIP < 31 | GRPIP < 31, "No", "Yes")))

输出

# A tibble: 500 x 3
   OCPIP GRPIP cost_burdened
   <int> <int> <chr>        
 1    25    27 No           
 2    35     3 No           
 3     5    18 No           
 4    37    32 Yes          
 5    25    39 No           
 6    30    11 No           
 7    38    27 No           
 8     0     1 NA           
 9    12    19 No           
10    23    16 No           
# ... with 490 more rows

推荐阅读