Переставьте столбцы 5-8, каждый раз, когда значение строки изменяется в столбцах 2, 3 или 4 - PullRequest
0 голосов
/ 03 февраля 2019

вот мой набор данных enter image description here

То, что я пытаюсь сделать, это транспонировать последние 4 столбца каждый раз, когда появляется новая трубка (или новая колония или новый образец). Поэтомупревращаясь в что-то вроде этого: enter image description here

Я пытался сделать это в R, но я открыт для других предложений, любая помощь очень ценится!

1 Ответ

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

ok нашел решение (для тех, у кого в будущем может возникнуть подобная проблема)

в приведенных ниже примерах данных, я предполагаю, что столбцы 2 и 3 должны остаться, а столбцы 4-6 должны бытьтранспонировать.

Я использовал «unstack», который сделал задачу довольно простой, вероятно, есть еще более простой способ обойти это, но для меня это работало вполне нормально, поэтому я просто оставлю это там.

создание данных

x <- data.frame("SN" = 1:24, "Tube" = c(1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,5,5,5,5,5,5,5,5), 
            "Name" = c("John","John","John","John","John","John","John","John","Dora","Dora","Dora","Dora","Dora","Dora","Dora","Dora","Nick","Nick","Nick","Nick","Nick","Nick","Nick","Nick"))
x$CP1 <- sample(40, size = nrow(x), replace = TRUE)
x$CP2 <- sample(40, size = nrow(x), replace = TRUE)
x$CP3 <- sample(40, size = nrow(x), replace = TRUE)

преобразование

tmp1 <- data.frame(CP1=x$CP1, ind=rep(1:8, nrow(x)/8))
tmp2 <- data.frame(CP2=x$CP2, ind=rep(1:8, nrow(x)/8))
tmp3 <- data.frame(CP3=x$CP3, ind=rep(1:8, nrow(x)/8))
new1=unstack(tmp1, CP1~ind)
new2=unstack(tmp2, CP2~ind)
new3=unstack(tmp3, CP3~ind)

z=unique(x[2:3])
tmp1=cbind(z,new1)
tmp2=cbind(z,new2)
tmp3=cbind(z,new3)
new.data=rbind(tmp1,tmp2,tmp3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...