如何基于数据框3行的值重命名列(R语言)
解决方案
可以通过以下步骤实现需求,全程使用tidyverse工具链完成:
- 生成新列名:从初始数据框的前3行、非
variable列中,按列将对应值用下划线拼接成新列名; - 替换列名:把原有的
x1/x2等列名替换为新生成的名称; - 清理数据:删除前3行填充数据,并将数值列转换为对应类型。
完整代码如下:
library(tidyverse) init_df <- tribble( ~variable, ~x1, ~x2, ~x3, ~x4, "filler", "A", "B", "C", "D", "filler", "1", "2", "3", "4", "filler", "01", "02", "03", "04", "var1", "10", "12", "14", "16", "var2", "0.1", "0.2", "0.3", "0.4" ) # 按列拼接前3行的非variable列值,生成新列名 new_col_names <- apply(init_df[1:3, -1], 2, paste, collapse = "_") # 重命名列 + 删除填充行 + 转换数值类型 final_df <- init_df %>% rename_with(~ new_col_names, starts_with("x")) %>% slice(-(1:3)) %>% mutate(across(-variable, as.numeric)) print(final_df)
运行后输出结果与目标数据框完全一致:
# A tibble: 2 × 5 variable A_1_01 B_2_02 C_3_03 D_4_04 <chr> <dbl> <dbl> <dbl> <dbl> 1 var1 10 12 14 16 2 var2 0.1 0.2 0.3 0.4
内容的提问来源于stack exchange,提问作者Godrim
相关产品推荐
相关产品推荐

