gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 04:24:56 26 4
gpt4 key购买 nike

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

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com