2015-11-20 59 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