在dplyr中选择多个列,然后将这些列中的观测值匹配到一个值,将其突变为NA?

时间:2019-09-05 20:00:57

标签: r dplyr data-management

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

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

尝试了mutate_at(),但是该函数不接受我的要求。

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

我试图与NA交换88888个观测值,以便我可以正确分析连续变量。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

在这里,我们可以使用mutate_at代替mutate_if。另外,如果打算只对选定的列进行突变,那么我们不需要select

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

但是,如果我们仅对select个列的子集感兴趣,并且仅返回这些列,请使用trasmute_at(这可以避免一步-或selectmutate_all一起使用)

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

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