dplyr::rename_all & dplyr::if_else

4
我可以帮你翻译。以下是您需要翻译的内容:

我有一个如下的数据框:

library(dplyr)

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

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

if_else(stringr::str_detect(columns, "au"), "id_per", columns)

简而言之,我想将名称gauskper更改为id_per。

3个回答

4

我们可以使用rename_with,因为rename_all已被弃用

library(dplyr)
library(stringr)
data.frame(gh225 = "foo1", gh765 = "foo2", gauskper = "foo3") %>% 
      rename_with(~ str_replace(., "au", "idper"), contains("au"))

关于使用 if_else,只需要一个 lambda 表达式即可,例如 ~
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

2
您可以将条件组合在一个函数中。
df %>% 
  rename_all(
    .funs = function(x){
      x %>% 
        stringr::str_replace_all(., "gh", "v") %>% 
        stringr::str_replace_all(., "gauskper", "id_per")
    }
)

0
问题已经被akrun回答并且是最好的,但如果我正确理解了你的意思:

“换句话说,我想把名称gauskper改为id_per。”

那么,实现这个目标的最佳方法是:

library(dplyr)
df %>% 
  rename(id_per = gauskper)

  gh225 gh765 id_per
1  foo1  foo2   foo3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接