r - 如何根据 R 中的另一个数据框更改列名?
问题描述
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)
推荐阅读
- jquery - 文本字段的倒数计时器
- javascript - 消息未显示在目的地(跨窗口通信)
- c# - WinUI DataGrid(来自 CommunityToolkit):如何获取当前选定的单元格?
- javascript - forEach 循环中的 event.addEventListener()
- python - 我怎样才能用 if/elif 做一个理解,而不是别的?
- ms-access - 单击按钮以从 MS Access 表单中的字段填充 Outlook 电子邮件
- linux - 在一定数量的字母之后和特定字符之前删除文本
- python - 在屏幕之间传递值
- reactjs - 反应日历不传递日期变量
- c++ - C++中auto关键字如何扣除类型