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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 17:42:45