2015-11-20 3 views
0

Я Хавин вопрос с R.кадр Reshape данных переменных в список

У меня есть следующий dataframe:

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.... 

Марк список 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 

 Смежные вопросы

  • Нет связанных вопросов^_^