如何用R的tidyr包pivot_longer重塑XYZ坐标数据框?
使用
tidyr::pivot_longer()重塑颅骨标记点数据集 针对你的数据集结构,核心是利用pivot_longer()的列名拆分功能,通过正则表达式识别标记点名称和坐标类型的对应关系,实现数据重塑。以下是完整解决方案:
完整代码
library(tidyr) library(dplyr) # 重塑数据并转换坐标为数值型 landmark_long <- landmark %>% pivot_longer( cols = -SNPRC, # 保留颅骨编号列,对其余列进行重塑 names_to = c("landmark", ".value"), # 拆分列名:第一部分为标记点名称,第二部分为坐标列名 names_pattern = "(.*)_(.*)" # 正则匹配"标记点_坐标"的列名结构 ) %>% mutate(across(c(X, Y, Z), as.numeric)) # 将字符型坐标转换为数值型
参数说明
cols = -SNPRC:排除SNPRC列,确保每个颅骨的编号能对应到其所有标记点。names_to = c("landmark", ".value"):.value是tidyr的特殊关键字,表示将列名拆分后的第二部分作为新的列名(即X/Y/Z),第一部分存入landmark列作为标记点名称。names_pattern = "(.*)_(.*)":正则表达式的两个捕获组,分别匹配下划线前后的标记点名称和坐标类型。mutate(across(...)):原数据中坐标为字符型,转换为数值型是后续分析的必要步骤。
输出示例
运行代码后得到的长格式数据如下(前6行):
# A tibble: 6 × 5 SNPRC landmark X Y Z <chr> <chr> <dbl> <dbl> <dbl> 1 1X3930 BRG -388. 117. 257. 2 1X3930 LMB -383. 81.3 287. 3 1X3930 OPI -378. 50.9 261. 4 1X4286 BRG -394. 116. 287. 5 1X4286 LMB -396. 80.0 324. 6 1X4286 OPI -390. 43.6 287.
内容的提问来源于stack exchange,提问作者antecessor
相关产品推荐
相关产品推荐

