首页 > 解决方案 > 在 dplyr 中选择多个列,然后将这些列中的这些观察值更改为 NA 如果它们匹配一个值?

问题描述

我有一个数据框,我想按原样保留其列,但将无意义的值(即每日卡路里摄入量 = 88888)更改为 NA。我正在尝试使用dplyr执行此操作,但找不到将列名组合为列表或匹配前缀(均以“DRPN”开头)并将 88888 值更改为 NA 的解决方案。

尝试过mutate_if(),但该函数不会获取列列表。

尝试过mutate_at(),但该功能不接受我的要求。

df_recode <- lab1_final %>%
          select(vars(starts_with("DRPN")) %>%
          mutate_if(vars, "88888", NA)

我试图将 88888 观察结果与 NA 交换,以便我可以正确分析连续变量。有任何想法吗?

标签: rdplyrdata-management

解决方案


在这里,我们可以使用mutate_at代替mutate_if. 此外,如果打算只改变选定的列,那么我们不需要select之前

library(dplyr)
lab1_final %>%
      mutate_at(vars(starts_with("DRPN")), na_if, y = "88888")

但是,如果我们只select对列的一个子集感兴趣并且只返回那些,使用trasmute_at(这可以避免一个步骤 - 或selectwith mutate_all

lab1_final %>%
      transmute_at(vars(starts_with("DRPN")), na_if, y = "88888")

88888如果有数字列,则不需要引号。


推荐阅读