在R语言中如何拆分PLANE列为两列并填充对应COORDINATE数据
解决方法
首先,先构造你的示例数据集,方便直接测试:
# 构造示例数据 df <- data.frame( RUNTIME = rep(1:3, 4), PLANE = rep(c("X", "X", "X", "Y", "Y", "Y"), 2), ID = rep(c("A1", "A1", "A1", "A1", "A1", "A1", "A2", "A2", "A2", "A2", "A2", "A2")), COORDINATE = c(1,3,8,2,9,3,2,4,6,1,7,3) )
方法1:使用tidyr包的pivot_wider(推荐,tidyverse生态)
pivot_wider是tidyverse中专门用于长表转宽表的函数,语法简洁直观:
library(tidyr) # 转换宽表 result_df <- pivot_wider( df, id_cols = c(RUNTIME, ID), # 按这两列分组聚合 names_from = PLANE, # 将PLANE的取值作为新列名 values_from = COORDINATE, # 新列的取值来源 names_glue = "{PLANE}COORDINATE" # 自定义新列名格式 ) # 查看结果 print(result_df)
运行后会直接生成你需要的结构:RUNTIME、ID、XCOORDINATE、YCOORDINATE。
方法2:使用reshape2包的dcast
如果你习惯使用reshape2包,也可以用dcast实现:
library(reshape2) # 转换宽表 result_df <- dcast( df, RUNTIME + ID ~ PLANE, # 左侧为分组列,右侧为要转成列的变量 value.var = "COORDINATE" # 取值对应的列 ) # 重命名列名以匹配需求 colnames(result_df)[3:4] <- c("XCOORDINATE", "YCOORDINATE") print(result_df)
两种方法都能得到目标输出,推荐优先使用pivot_wider,它属于tidyverse生态,语法更统一,后续数据处理兼容性更好。
内容的提问来源于stack exchange,提问作者Shanelle
相关产品推荐
相关产品推荐

