R 每次第2列、第3列或第4列中的行值更改时,将第5-8列转置

R 每次第2列、第3列或第4列中的行值更改时,将第5-8列转置,r,conditional,transpose,R,Conditional,Transpose,这是我的数据集 我想做的是每次有新试管(或新菌落或新样本)时,将最后4列转置 因此转化成这样的东西: 我一直试图在R做这件事,但我愿意接受其他建议,非常感谢任何帮助 ok找到了一个解决方案(适用于将来可能有类似问题的人) 在下面的示例数据中,我假设第2列和第3列必须保留,而第4-6列需要进行转置 我使用了“unstack”,这使任务变得非常简单,可能有一种更简单的方法来解决这个问题,但这对我来说非常有效,所以我将把它放在那里 创建数据 x对不起,让我更清楚地说明一下:当我说“每次有新试管(或

这是我的数据集

我想做的是每次有新试管(或新菌落或新样本)时,将最后4列转置 因此转化成这样的东西:

我一直试图在R做这件事,但我愿意接受其他建议,非常感谢任何帮助

ok找到了一个解决方案(适用于将来可能有类似问题的人)

在下面的示例数据中,我假设第2列和第3列必须保留,而第4-6列需要进行转置

我使用了“unstack”,这使任务变得非常简单,可能有一种更简单的方法来解决这个问题,但这对我来说非常有效,所以我将把它放在那里

创建数据
x对不起,让我更清楚地说明一下:当我说“每次有新试管(或新菌落或新样本)”时,我的意思是每次名为“试管”或“菌落”的列中的值发生变化时,您应该给出一个最小值,这将使其他人更容易帮助您。此外,新数据结构的最终目标是什么?或许可以通过更简单的重组或根本不重组来实现这一点。
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)