Дублирование строк в RN раз и добавление нового столбца подсчета - PullRequest
0 голосов
/ 14 сентября 2018

Ciao: вот данные, которые у меня есть "есть"

  have = data.frame(c(1,2,3),
                      c(90,87,71),
                      c(600,601,602))
    colnames(have) <- c("STUDENT","SCORE","TYPE")

Вот данные, которые я хочу "хочу"

  want = data.frame(c(1,1,2,2,3,3),
                      c(90,90,87,87,71,71),
                      c(600,600,601,601,602,602),
                      c(100,101,100,101,100,101))

    colnames(want) <- c("STUDENT","SCORE","TYPE","CLASS")

Как показано выше здесь, начиная с "иметь"данные, которые я хочу скопировать строку для каждого СТУДЕНТА;добавьте новый столбец "КЛАСС", который равен 100 для первого ряда СТУДЕНТА и 101 для второго ряда СТУДЕНТА.

Ура!

Ответы [ 3 ]

0 голосов
/ 14 сентября 2018
classes <- as.matrix(seq(100,101, by=1))
classes_rep <-matrix(classes, nrow=nrow(have)*nrow(classes))
want <- cbind(rbind(have, have), classes_rep)
0 голосов
/ 14 сентября 2018

Я создаю дополнительный ключ для merge

have$key=1
mergedf=data.frame('CLASS'=c(100,101),'key'=1)
merge(have,mergedf,all.x=T)
  key STUDENT SCORE TYPE CLASS
1   1       1    90  600   100
2   1       1    90  600   101
3   1       2    87  601   100
4   1       2    87  601   101
5   1       3    71  602   100
6   1       3    71  602   101
0 голосов
/ 14 сентября 2018

李哲源 плюс Аксеман дал ответы

## R core
data.frame(have[rep(1:nrow(have), each = 2), ], CLASS = c(100, 101),
           row.names = seq_len(2 * nrow(have))) 

## dplyr
dplyr::bind_rows('100' = have, '101' = have, .id = 'CLASS')
...