r - 如何使用名称向量重命名 tidyverse 中的列

标签 r dplyr dynamic rename

我编写了以下(有效的)函数来更改包含当前列名和所需列名的向量中的列名,

change.name <- function (dt, from, to) 
{
    loc <- match(from, names(dt))
    chg.loc <- loc[!is.na(loc)]
    if (length(chg.loc) == 0) 
        return(dt)
    names(dt)[chg.loc] = to[!is.na(loc)]
    return(dt)
}

是否可以用重命名或 dplyr 的其他部分替换此功能。我宁愿不需要我自己的功能。

这是所需功能的示例,

cnames = tibble(from = c("hair_color", "banana", "height"),
                to = c("HeadCap", "Orange", "VertMetric"))
starwars %>% select(name, height, mass, hair_color, skin_color) %>% 
  top_n(5) %>% change.name(cnames$from, cnames$to)
  name            VertMetric  mass HeadCap skin_color 
  <chr>                <int> <dbl> <chr>   <chr>      
1 R2-D2                   96  32   NA      white, blue
2 R5-D4                   97  32   NA      white, red 
3 Gasgano                122  NA   none    white, blue
4 Luminara Unduli        170  56.2 black   yellow     
5 Barriss Offee          166  50   black   yellow

请注意,cnames$from 中的“banana”在 starwars 中丢失了,并且不会触发该函数。

最佳答案

您可以使用rename_with,但在下面的实现中,我仍然需要在现有名称上索引tofrom

idx = cnames$from %in% names(starwars)

starwars %>% select(name, height, mass, hair_color, skin_color) %>% 
  top_n(5) %>% 
  rename_with(~cnames$to[idx], cnames$from[idx])

关于r - 如何使用名称向量重命名 tidyverse 中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73390056/

相关文章:

r - 无法编织R程序(没有名为 'backports'的包

r - 如何在R中组合未知数量的数据帧?

r - 折叠数据框中的列 (R)

dll - 使用 DirectoryCatalog 时动态更改部件 (DLL)

r - 具有不同线条样式和标记的ggplot折线图

r - 使用动态列名在 dplyr 中按自定义顺序排列

按组删除特定行号/条件以下的行

r - 使用 dplyr 格式化 summarise_each 中的输出

css - Django动态css实现: only one item changes (background) dynamically.怎么办?

当在派生类中定义重载时,C# 后期绑定(bind)方法重载不起作用