首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在dplyr中选择多个列,然后如果它们与值匹配,那么将这些列中的这些观察值更改为NA?

在dplyr中选择多个列,然后如果它们与值匹配,那么将这些列中的这些观察值更改为NA?
EN

Stack Overflow用户
提问于 2019-09-05 20:00:57
回答 1查看 344关注 0票数 0

我有一个数据框架,它的列我想保持原样,但是将无意义的值(即每日卡路里摄入量= 88888)变到NA。我试图用dplyr来实现这一点,但无法找到将列名组合为列表或匹配前缀(均以“DRPN”开头)并将88888值更改为NA的解决方案。

尝试了mutate_if(),但是函数不会接受列的列表。

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

代码语言:javascript
复制
df_recode <- lab1_final %>%
          select(vars(starts_with("DRPN")) %>%
          mutate_if(vars, "88888", NA)

我试着用NA来交换88888的观测值,这样我就可以正确地分析连续变量。有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2019-09-05 20:02:38

在这里,我们可以使用mutate_at而不是mutate_if。另外,如果我们的意图是只对选定的列进行变异,那么我们之前不需要select

代码语言:javascript
复制
library(dplyr)
lab1_final %>%
      mutate_at(vars(starts_with("DRPN")), na_if, y = "88888")

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

代码语言:javascript
复制
lab1_final %>%
      transmute_at(vars(starts_with("DRPN")), na_if, y = "88888")

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57812283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档