переставить многостолбцовый фрейм данных - PullRequest
0 голосов
/ 01 февраля 2019

Я хочу переставить свой фрейм данных следующим образом: первые 3 столбца должны быть добавлены один под другим, а также второй 3. Столбцы ID и Class должны сохраняться в соответствии с перестановкой фрейма данных.

Идентификатор стартового фрейма данных df

set.seed(1)
 df <- data.frame(ID = rep(c("CT1", "CT2", "CT3", "SB1", "SB2","SB3","AM1", "AM2", "AM3")),
                     Class = rep(c("CT", "SB", "AM"), each = 3),
                     replicate(6,sample(0:100,9,rep=TRUE)))

Вывод df2

set.seed(1)
    df2 <- data.frame(ID = c(rep(c("CT1", "CT2", "CT3", "SB1", "SB2","SB3","AM1", "AM2", "AM3" ), times=3)),
                            Class =  rep(rep(c("CT", "SB", "AM"), each= 3), times=3),
                            replicate(2,sample(0:100,27,rep=TRUE)))

Я пробовал пару подходов, использующих merge от id.vars ID и Class

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Несколько наборов столбцов можно melt редактировать, используя data.table

library(data.table)
melt(setDT(df), measure = list(3:5, 6:8), value.name = c('X1', 'X2'))[,
                 variable := NULL][] 
#    ID Class X1 X2
#1: CT1    CT 26 38
#2: CT2    CT 37 87
#3: CT3    CT 57 34
#4: SB1    SB 91 48
#5: SB2    SB 20 60
#6: SB3    SB 90 49
# ...
0 голосов
/ 01 февраля 2019

Мы можем использовать

data.frame(df[, c("ID", "Class")], X1 = unlist(df[, 3:5]), X2 = unlist(df[, 6:8]))
#      ID Class X1 X2
# X11 CT1    CT 26 38
# X12 CT2    CT 37 87
# X13 CT3    CT 57 34
# X14 SB1    SB 91 48
# X15 SB2    SB 20 60
# X16 SB3    SB 90 49
# ...

Первые два столбца расширяются путем переработки, в то время как другие два удобно создаются с unlist.В этом случае на самом деле нет нужды в чем-то причудливом, если это ваша настоящая проблема, а таких триплетов нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...