如何拆分R数据框列名下划线分隔元素并重组数据结构
实现方法
可以用tidyverse工具包快速完成这个转换,步骤如下:
- 拆分列名:将原数据框的列名按下划线拆分,提取前三个元素作为
clm1、clm2、clm3,剩余部分作为值列的名称。 - 转置原数据:把原数据的列转换为行,让每一行对应原数据的一列。
- 合并数据:将拆分得到的
clm1-clm3与转置后的数据合并,并设置正确的列名。
完整代码
# 加载所需包 library(tidyverse) # 输入数据 df <- structure(list(post_name_mo_score = c("3433243juhy234_2323526", "3433243juhy234_2323526", "3433243juhy234_2323526"), minna_yout_qu_mai = c("3433243juhy234_2323526", "3433243juhy234_2323526", "3433243juhy234_2323526"), tour_sima_ta_tup = c("3433243juhy234_2323526", "3433243juhy234_2323526", "3433243juhy234_2323526")), class = "data.frame", row.names = c(NA, -3L)) # 拆分列名,提取clm1-clm3和值列名称 col_split <- str_split(colnames(df), "_", simplify = TRUE) clm_info <- as_tibble(col_split[, 1:3], .name_repair = ~ c("clm1", "clm2", "clm3")) value_col_names <- col_split[, 4] # 转置原数据并合并clm信息 result <- bind_cols( clm_info, as_tibble(t(df)) %>% set_names(value_col_names) ) # 查看结果 print(result)
运行结果
# A tibble: 3 × 6 clm1 clm2 clm3 score mai tup <chr> <chr> <chr> <chr> <chr> <chr> 1 post name mo 3433243juhy234_2323526 3433243juhy234_2323526 3433243juhy234_2323526 2 minna yout qu 3433243juhy234_2323526 3433243juhy234_2323526 3433243juhy234_2323526 3 tour sima ta 3433243juhy234_2323526 3433243juhy234_2323526 3433243juhy234_2323526
内容的提问来源于stack exchange,提问作者12666727b9
相关产品推荐
相关产品推荐

