r - 根据 data.frame 重命名 colnames
问题描述
我有几个 data.frames df1
, df2
, df3
, ... 。
df1 <- data.frame(var1 = c("a", "b", "c"),
var2 = c("a", "b", "c"),
var3 = c("a", "b", "c"),
var4 = c("a", "b", "c"))
df2 <- data.frame(var1 = c("a", "b", "c"),
var2 = c("a", "b", "c"),
var3 = c("a", "b", "c"),
var4 = c("a", "b", "c"))
df3 <- data.frame(var1 = c("a", "b", "c"),
var2 = c("a", "b", "c"),
var3 = c("a", "b", "c"),
var4 = c("a", "b", "c"))
df4 <- data.frame(var1 = c("a", "b", "c"),
var2 = c("a", "b", "c"),
var3 = c("a", "b", "c"),
var4 = c("a", "b", "c"))
我有一个 data.frame rename_vars
,它告诉 mich 应该重命名哪个 data.frame 中的哪些变量。
rename_vars <- data.frame(df = c("df1", "df1", "df3"),
var = c("var1", "var3", "var1"),
rename_to = c("var1x", "var3y", "var1z"))
df var rename_to
1 df1 var1 var1x
2 df1 var3 var3y
3 df2 var1 var1z
例如,在df1
变量var1
应该被重命名为var1x
并且var3
应该被调用var3x
。在 data.frame 中应该调用df2
变量等等。var1
var1z
但是,我怎样才能自动化这个重命名不同data.frames中的变量的过程rename_vars
呢?
感谢帮助!
解决方案
我们根据 'df' 列拆分 'rename_vars' 数据,然后在( ) 和 'lst1'的值上循环list
使用,并使用 更改列名。最好将它保存在 a 中,但如果我们需要更改全局单个对象,请在使用对象名称命名('out')之后使用map2
names
list
mget
rename_at
list
list2env
list
library(dplyr)
library(purrr)
lst1 <- split(rename_vars[-1], rename_vars$df)
out <- map2(mget(names(lst1)), lst1, ~ {
nm1 <- .y[[1]]
nm2 <- .y[[2]]
.x %>%
rename_at(vars(nm1), ~ nm2)})
list2env(out, .GlobalEnv)
-输出
df1
# var1x var2 var3y var4
#1 a a a a
#2 b b b b
#3 c c c c
df3
# var1z var2 var3 var4
#1 a a a a
#2 b b b b
#3 c c c c
或者另一种选择!!!
是rename
library(tibble)
lst1 <- split(as.list(deframe(rename_vars[3:2])), rename_vars$df)
list2env(map2(mget(names(lst1)), lst1, ~ .x %>%
rename(!!! .y)), .GlobalEnv)
或者使用base R
循环for
和assign
for(i in seq_len(nrow(rename_vars))) {
tmp1 <- get(rename_vars$df[i])
i1 <- match(rename_vars$var[i], names(tmp1))
names(tmp1)[i1] <- rename_vars$rename_to[i]
assign(rename_vars$df[i], tmp1)
}
推荐阅读
- r - 根据开始和结束索引(保存在两个向量中)并使用条件将 data.frame 拆分为更小的 data.frame
- python - 使用 SQLAlchemy 从另一个表中查询一个表
- javascript - 为什么我的社区连接器上跳过了 AuthType 函数?
- javascript - 按住input type=file的onClick,做我想做的事,然后让浏览器启动一个文件对话框?
- ios - 我将如何为单位制作一个选择器?
- python - 将消息从 kafka 存储到 hdfs
- python - 如果数据本身包含换行符,Python csv dictwriter 如何避免写入多行?
- r - 计算行匹配模式的数量
- webrtc - WebRTC - 在 onIceCandidate 中首次将候选人设为空
- javascript - 从 C# 桌面应用程序打开浏览器并在网页中捕获参数