数据分离

时间:2017-03-31 07:31:58

标签: 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 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'循环,但每次变量NAMEOFTHESTUDENT正在转移。

1 个答案:

答案 0 :(得分:1)

另一个选择是使用嵌套的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)
相关问题