如何使用dplyr基于行数据创建新列并以另一列值命名新列
实现方法
你可以搭配dplyr和tidyr的pivot_wider函数完成需求,示例代码如下:
第一步:加载依赖包&构造示例数据
library(dplyr) library(tidyr) # 你的原始数据 my_data <- data.frame( Cars = c("toyota", "benz", "bmw"), Colour = c("red", "white", "blue") )
第二步:转换生成目标数据框
方法1:更简洁的写法(利用R的向量回收机制)
result <- my_data %>% bind_cols( pivot_wider(my_data, names_from = Cars, values_from = Colour) )
方法2:逻辑更清晰的写法
result <- my_data %>% # 先提取汽车-颜色的对应关系,转成单行宽表 pivot_wider(names_from = Cars, values_from = Colour) %>% # 和原始表做全拼接,让每一行都带上所有车型的颜色列 crossing(my_data, .) %>% # 调整列顺序匹配你的预期结果 select(Cars, Colour, everything())
结果验证
两种方法输出的result结构和你要求的完全一致:
| Cars | Colour | toyota | benz | bmw |
|---|---|---|---|---|
| toyota | red | red | white | blue |
| benz | white | red | white | blue |
| bmw | blue | red | white | blue |
内容的提问来源于stack exchange,提问作者SidO
相关产品推荐
相关产品推荐

