You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中如何将DataFrame按name列转换为多列(处理unk_*列)

解决方法

你可以用tidyr包的pivot_longer + pivot_wider组合来实现这个转换,步骤如下:

  1. 先把所有以unk_开头的列转成长格式,保留name列作为变量标识:
library(tidyverse)

# 原始数据
my_df = tibble(name = c('car', 'mileage', 'year'), 
               unk_1 = c('toyota', '1000', '2022'), 
               unk_2 = c('hyundai', '50', '2024'))

# 第一步:转成长格式
long_df <- my_df %>%
  pivot_longer(cols = starts_with("unk_"), 
               names_to = "temp_id", 
               values_to = "value")

这一步会生成包含name、temp_id、value三列的长表,每个unk_列的内容被拆分成多行。

  1. 再将长表转回宽格式,用name列的值作为新的列名:
final_df <- long_df %>%
  pivot_wider(names_from = name, 
              values_from = value) %>%
  select(-temp_id) # 移除临时标识列

执行完后,final_df就是你想要的格式:

# A tibble: 2 × 3
  car     mileage year 
  <chr>   <chr>   <chr>
1 toyota  1000    2022 
2 hyundai 50      2024 

补充说明

  • starts_with("unk_")会自动匹配所有以unk_开头的列,不管有40个还是更多,都不需要手动列出来;
  • 如果需要保留temp_id列(比如记录原始列的来源),可以去掉select(-temp_id)这一步。

内容的提问来源于stack exchange,提问作者Beans On Toast

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 18:33:16