R 数据分离

R 数据分离,r,dataframe,R,Dataframe,我有一个txt文件,我想上传到R,它看起来像: NAMEOFTHESTUDENT1 CLASS1-NOTE1,NOTE2,NOTE3;CLASS2-NOTE1,NOTE2,NOTE3;CLASS3-NOTE1,NOTE2,NOTE3 NAMEOFTHESTUDENT2 CLASS1-NOTE1,NOTE2,NOTE3;CLASS2-NOTE1,NOTE2,NOTE3;CLASS3-NOTE1,NOTE2,NOTE3 我想创建一个数据帧以获得: NAMEOFTHESTUDENT1 CLASS1

我有一个txt文件,我想上传到R,它看起来像:

NAMEOFTHESTUDENT1 CLASS1-NOTE1,NOTE2,NOTE3;CLASS2-NOTE1,NOTE2,NOTE3;CLASS3-NOTE1,NOTE2,NOTE3
NAMEOFTHESTUDENT2 CLASS1-NOTE1,NOTE2,NOTE3;CLASS2-NOTE1,NOTE2,NOTE3;CLASS3-NOTE1,NOTE2,NOTE3
我想创建一个数据帧以获得:

NAMEOFTHESTUDENT1 CLASS1 NOTE1
NAMEOFTHESTUDENT1 CLASS1 NOTE2
NAMEOFTHESTUDENT1 CLASS1 NOTE3

NAMEOFTHESTUDENT1 CLASS2 NOTE1
NAMEOFTHESTUDENT1 CLASS2 NOTE2
NAMEOFTHESTUDENT1 CLASS2 NOTE3

NAMEOFTHESTUDENT1 CLASS3 NOTE1
NAMEOFTHESTUDENT1 CLASS3 NOTE2
NAMEOFTHESTUDENT1 CLASS3 NOTE3

NAMEOFTHESTUDENT2 CLASS1 NOTE1
NAMEOFTHESTUDENT2 CLASS1 NOTE2
NAMEOFTHESTUDENT2 CLASS1 NOTE3

NAMEOFTHESTUDENT2 CLASS2 NOTE1
NAMEOFTHESTUDENT2 CLASS2 NOTE2
NAMEOFTHESTUDENT2 CLASS2 NOTE3

NAMEOFTHESTUDENT2 CLASS3 NOTE1
NAMEOFTHESTUDENT2 CLASS3 NOTE2
NAMEOFTHESTUDENT2 CLASS3 NOTE3
有人能帮我做这个吗?
我尝试使用“For”循环,但每次学生的变量名都在移动。

另一种选择是使用嵌套的
cSplit
方法:

library(splitstackshape)
cSplit(
  cSplit(
    cSplit(
      dat, 'V2', sep = ';', direction = 'long'
    ), 
    'V2', sep = '-', direction = 'wide'
  ), 
  'V2_2', sep = ',', direction = 'long'
)
其中:

                   V1   V2_1  V2_2
 1: NAMEOFTHESTUDENT1 CLASS1 NOTE1
 2: NAMEOFTHESTUDENT1 CLASS1 NOTE2
 3: NAMEOFTHESTUDENT1 CLASS1 NOTE3
 4: NAMEOFTHESTUDENT1 CLASS2 NOTE1
 5: NAMEOFTHESTUDENT1 CLASS2 NOTE2
 6: NAMEOFTHESTUDENT1 CLASS2 NOTE3
 7: NAMEOFTHESTUDENT1 CLASS3 NOTE1
 8: NAMEOFTHESTUDENT1 CLASS3 NOTE2
 9: NAMEOFTHESTUDENT1 CLASS3 NOTE3
10: NAMEOFTHESTUDENT2 CLASS1 NOTE1
11: NAMEOFTHESTUDENT2 CLASS1 NOTE2
12: NAMEOFTHESTUDENT2 CLASS1 NOTE3
13: NAMEOFTHESTUDENT2 CLASS2 NOTE1
14: NAMEOFTHESTUDENT2 CLASS2 NOTE2
15: NAMEOFTHESTUDENT2 CLASS2 NOTE3
16: NAMEOFTHESTUDENT2 CLASS3 NOTE1
17: NAMEOFTHESTUDENT2 CLASS3 NOTE2
18: NAMEOFTHESTUDENT2 CLASS3 NOTE3

已用数据:

dat <- read.table(text = "NAMEOFTHESTUDENT1 CLASS1-NOTE1,NOTE2,NOTE3;CLASS2-NOTE1,NOTE2,NOTE3;CLASS3-NOTE1,NOTE2,NOTE3
NAMEOFTHESTUDENT2 CLASS1-NOTE1,NOTE2,NOTE3;CLASS2-NOTE1,NOTE2,NOTE3;CLASS3-NOTE1,NOTE2,NOTE3", header = FALSE, as.is = TRUE)

dat您可以像往常一样读取文件(但是使用
stringsAsFactors=FALSE
),然后在一步一步分割字符串之后。我这样做了,但仍然可以完美地更改学生编号!!非常感谢。