2015-11-20 84 views
0

我就吃一个问题与R.重塑数据帧的变量列表进入

我有以下数据框:

FirstName LastName Exercice1 Exercice2 
    Eric  A  15  12 
    Eric  A  14  14 
    Eric  A  12  15 
    Paul  B  12  14 
    Paul  B  14  14 
    Joe  C  15  12 
    Joe  C  15  17 
    Joe  C  16  17 
    Joe  C  18  19 

而且我希望将其更改为以下:

FirstName LastName   Mark 
         Exercice1 Exercice2 
    Eric   A   15  12 
          14  14 
          12  15 
         Exercice1 Exercice2 
    Paul  B    12  14 
          14  14 
         Exercice1 Exercice2 
    Joe  C    15  12 
          15  17 
          16  17 
          18  19 

总之,我想将每个学生的标记分组为一个数据框的单个变量。

你有什么想法,如果这是可能的,我应该怎么做?

+0

你到现在为止尝试过什么?把你的问题的信息。 – jogo

+0

你只是在谈论这个层次类型表中的数据表示? – A5C1D2H2I1M1N2O1R2T1

+2

您可以为此编写打印方法,但它不是R中的默认行为。这种安排对分析并不是很有用,它更适合于演示。 –

回答

2

如果你需要的是马克列是学生的data.frame,那么你可以使用这个:

dat <- read.table(text = "FirstName LastName Exercice1 Exercice2 
    Eric  A  15  12 
        Eric  A  14  14 
        Eric  A  12  15 
        Paul  B  12  14 
        Paul  B  14  14 
        Joe  C  15  12 
        Joe  C  15  17 
        Joe  C  16  17 
        Joe  C  18  19", stringsAsFactors = FALSE, header = TRUE) 

dat2 <- dat[!duplicated(dat[,1:2]),1:2] 
dat2$Mark <- I(split(dat[,3:4], list(dat$FirstName, dat$LastName), drop = TRUE)) 

dat2 
# FirstName LastName   Mark 
#1  Eric  A c(15, 14.... 
#4  Paul  B c(12, 14.... 
#6  Joe  C c(15, 15.... 

Mark是dataframes的列表:

> dat2$Mark 
$Eric.A 
    Exercice1 Exercice2 
1  15  12 
2  14  14 
3  12  15 

$Paul.B 
    Exercice1 Exercice2 
4  12  14 
5  14  14 

$Joe.C 
    Exercice1 Exercice2 
6  15  12 
7  15  17 
8  16  17 
9  18  19 

现在为了打印就像你展示的那样,你需要一个定制的打印功能,但是你不应该需要这个功能。或者只需添加空行即可获得所需的打印输出。这不像你的输出,但它是一个开始:

dat3 <- dat 
dat3[duplicated(dat[,1:2]),1:2] <- "" 
print(dat3, row.names = FALSE) 
# FirstName LastName Exercice1 Exercice2 
#  Eric  A  15  12 
#       14  14 
#       12  15 
#  Paul  B  12  14 
#       14  14 
#  Joe  C  15  12 
#       15  17 
#       16  17 
#       18  19