【问题标题】:Create a Variable from Two Different Variables Using if_else in R在 R 中使用 if_else 从两个不同的变量创建一个变量
【发布时间】:2021-11-28 11:37:55
【问题描述】:

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

我想将那些报告 0 为缺失,任何大于 30 的值设置为“Yes”,任何值 1-30 为“No”。这是我的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 在内的不同配置时,它仍然无法正常工作。

【问题讨论】:

标签: r if-statement variables dplyr logical-operators


【解决方案1】:

这是case_when() 的实现:

library(tidyverse)

set.set(191)

cost_burdened <- tibble(
  OCPIP = c(0, 12, 31, 35, 47),
  
  GRPIP = c(31, 32, 15, 0, 47)
)

cost_burdened %>% 
  mutate(cost_burdened = case_when( 
    (OCPIP == 0) | (GRPIP == 0) ~ NA_character_, 
    (OCPIP < 31) | (GRPIP < 31) ~ "No", 
    TRUE ~ "Yes")
        )

【讨论】:

  • 这对我的数据也不起作用。我得到了最终编码变量中的所有 NA。
【解决方案2】:

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

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

【讨论】:

  • 这对我的数据不起作用。我遵循了您的变异代码示例,它导致新变量中的所有 NAs
  • 您是否准确地执行了我的示例中的所有代码?使用dput 函数放置您的数据。告诉我运行我的代码后得到的结果。通过编辑您的问题来完成所有这些操作。
猜你喜欢
  • 1970-01-01
  • 2011-02-26
  • 2019-09-11
  • 1970-01-01
  • 2019-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多