首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dplyr::rename_all & dplyr::if_else

dplyr::rename_all & dplyr::if_else
EN

Stack Overflow用户
提问于 2021-08-21 17:48:29
回答 3查看 128关注 0票数 2

我有以下数据:

代码语言:javascript
复制
library(dplyr)

df <- data.frame(gh225 = "foo1", gh765 = "foo2", gauskper = "foo3") %>% 
  rename_all(funs(stringr::str_replace_all(., "gh", "v")))

我想使用rename_all与if_else相结合,但是我找不到方法,逻辑应该是这样的(但是使用变量):

代码语言:javascript
复制
if_else(stringr::str_detect(columns, "au"), "id_per", columns)

话说回来,我想把这个名字改成id_per。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-08-21 18:26:24

我们可以使用rename_with,因为不推荐使用rename_all

代码语言:javascript
复制
library(dplyr)
library(stringr)
data.frame(gh225 = "foo1", gh765 = "foo2", gauskper = "foo3") %>% 
      rename_with(~ str_replace(., "au", "idper"), contains("au"))

关于if_else的使用,它只需要一个lambda表达式,即~

代码语言:javascript
复制
data.frame(gh225 = "foo1", gh765 = "foo2", gauskper = "foo3") %>%  
       rename_with(~ if_else(str_detect(., "au"), "id_per", .), everything())
  gh225 gh765 id_per
1  foo1  foo2   foo3
票数 4
EN

Stack Overflow用户

发布于 2021-08-21 18:25:44

您可以在一个函数中组合这些条件。

代码语言:javascript
复制
df %>% 
  rename_all(
    .funs = function(x){
      x %>% 
        stringr::str_replace_all(., "gh", "v") %>% 
        stringr::str_replace_all(., "gauskper", "id_per")
    }
)
票数 2
EN

Stack Overflow用户

发布于 2021-08-21 18:43:23

这个问题已经由阿克兰回答了,而且是最好的,但当我正确地理解你时:

“话说回来,我想把这个名字改名为id_per。”

然后

实现这一目标的最佳途径是:

代码语言:javascript
复制
library(dplyr)
df %>% 
  rename(id_per = gauskper)
代码语言:javascript
复制
  gh225 gh765 id_per
1  foo1  foo2   foo3
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68875447

复制
相关文章

相似问题

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