gpt4 book ai didi

r - 如何根据R中的另一个数据框更改列名?

转载 作者:行者123 更新时间:2023-12-04 12:25:45 27 4
gpt4 key购买 nike

df1 <- data.frame(
cola = c('1',NA,'c','1','1','e','1',NA,'c','d'),
colb = c("A",NA,"C","D",'a','b','c','d','c','d'),
colc = c('a',NA,'c','d','a',NA,'c',NA,'c','d'),stringsAsFactors = TRUE)

df2<-data.frame(name=c('cola','colc','colb'),
altname=c('a','c','b'))

df1 %>% table %>% data.frame(.)

上述代码的结果为:
   cola colb colc Freq
1 1 a a 1
2 c a a 0

我想根据 df2 更改结果的列名称(例如,将 colb 更改为 b ),预期结果为:
      a    b    c Freq
1 1 a a 1
2 c a a 0

怎么做?

最佳答案

我们可以使用 rename_at 删除子字符串

library(stringr)
libraryr(dplyr)
df1 %>%
table %>%
data.frame(.) %>%
rename_at(1:3, ~ str_remove(., "col"))

或者如果它需要来自'df2'
df1 %>%
table %>%
data.frame(.) %>%
rename_at(1:3, ~ setNames(as.character(df2$altname), df2$name)[.])

更新

如果 'df1' 中的所有列名都不在 'df2' 的 key/val 列中,则一个选项是
df1 %>%
table %>%
data.frame(.) %>%
rename_at(1:3, ~ coalesce(setNames(as.character(df2$altname), df2$name)[.], .))

或使用基础 R
out <- df1 %>% table %>% data.frame(.)
names(out) <- sub("col", "", names(out))

如果它需要基于第二个数据集
name(out)[-4] <- df2$altname[match(names(out)[-4], df2$name)]

或与 substr
names(out) <- substring(names(out), 4)

关于r - 如何根据R中的另一个数据框更改列名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57518761/

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