【问题标题】:Separate one column into several in R data frame and then pivot在 R 数据框中将一列分成几列,然后旋转
【发布时间】:2026-01-05 04:50:01
【问题描述】:

我有一个以下格式的数据框,包含两列。

第一列是名称,第二列是描述,表示层次结构中的级别。 即A校和B校同级,Class比学校低一级,所以des更长,在其学校des1@123或1@124后面多了一个@。然后学生……..

name        des
School A    1@123
School B    1@124
Class A     1@123@230
Class B     1@123@231
Class C     1@124@232
Class D     1@124@233
Student 1   1@123@230@001
Student 2   1@123@231@002
Student 3   1@123@231@003
Student 4   1@124@232@004
Student 5   1@124@233@005

我想根据他们的 des 将数据重新排列成几列,比如旋转。即不确定我们在 R 中是否有任何相关代码?谢谢。

School A    Class A   Student 1
School A    Class B   Student 2
School A    Class B   Student 3
School B    Class C   Student 4
School B    Class D   Student 5

【问题讨论】:

    标签: r pivot tidyr


    【解决方案1】:

    这应该可以帮助您完成大部分工作,剩下的只是重新编码或查找

    library(tidyr)
    library(dplyr)
    
    separate(df, des, into = c("School_1", "School_2", "Class"), 
             sep = "@", extra = "drop") %>%
      unite(School, School_1:School_2) %>%
      .[grepl("Student", .$name), ]
    
    #         name School Class
    # 7  Student 1  1_123   230
    # 8  Student 2  1_123   231
    # 9  Student 3  1_123   231
    # 10 Student 4  1_124   232
    # 11 Student 5  1_124   233
    # 12 Student 5  1_124   233
    

    【讨论】: