【发布时间】:2023-01-18 01:05:11
【问题描述】:
我有五个数据框(df1、df2、df3、df4、df5),包括需要重命名的多个列。在一个单独的数据框中,它用作重命名的映射(见下表),我有三列,一列包含新变量名称,另外两列包含需要重命名的变量。旧变量 1 指的是 df1、2 和 3,而 old_variables2 指的是 df4 和 df5。
| New variables | old variables1 | old variables2 |
|---|---|---|
| DPG | DPG1, DPG2, DPG3 | DPG1, DPG2 |
| LMN | LMN1, LMN2, LMN3 | LMN1, LMN2 |
| CLG | CLG1, CLG2, CLG3 | CLG1, CLG2 |
我需要使用地图数据编写代码,根据地图数据中的新变量列重命名我的五个数据框中的列。例如DPG1、LMN1、CLCG1属于df1,应该重命名为DPG、LMN、CLG。 df2 和 df3 也一样。我尝试使用通用代码,因为信息可能会在我的数据文件中更新。 有人可以给我一些提示吗? 我不知道如何处理旧变量列中每个单元格中以逗号分隔的多个值。
感谢@starja,我想出了一个解决方案,但我仍然对函数的左连接部分有问题,因为包含 by = c("original_variables" = "old_variables1","old_variables2") 是错误的。
cols<- c(old_variables1, old_variables2)
rename_function <- function(col_names, rename_data = rename_info) {
for (col in cols) {
rename_info_clean <- separate_rows(rename_info,all_of(col))
}
data.frame(original_variables = col_names) %>%
left_join(rename_info_clean , by = c("original_variables" = "old_variables1","old_variables2")) %>%
mutate(final_name = coalesce(new_variables, original_variables)) %>%
pull(final_name)
}
【问题讨论】:
-
换句话说,
df1$DPG1、df2$DPG2和df3$DPG3需要重命名为df1$DPG、df2$DPG和df3$DPG等吗? -
@AndreWildberg 是的,没错。
-
您可以尝试使用
<<-进行全局分配,它可以工作,但并不真正推荐。类似于df_list <- list(df1, df2, df3)sapply(1:nrow(df_nm), function(x) colnames(df_list[[x]])[grep(gsub(", ", "|", df_nm$old_variables[x]), colnames(df_list[[x]]))] <<- df_nm$New_variables[x])。
标签: r dataframe dictionary rename