从长格式到宽格式 R 中的多个变量

from long to wide format multiple variables in R

我有一个像这样的长格式的 table:

gene  tissue tpm
  A   liver   5
  A   brain   2
  B   ovary   10
  B   brain   1
  C   brain   15
  C   liver   6

我想将其转换为更宽的格式:

gene tissue1 tissue2 tpm1 tpm2
  A  liver   brain    5    2
  B  ovary   brain    10   1
  C  brain   liver    15   6

我试过 dcastspread 但我得到了这个结果:

gene  liver brain ovary
 A      5     2     NA
 B      NA    1     10
 C      6     15    NA

这不是我想要的。

谢谢!

我不知道在 R 语言中有什么函数可以一次解决这个难题,但是你可以使用 for 循环来重新排列你的数据框。

代码如下:

data <- data.frame(gene=c("A","A","B","B","C","C"),
                tissue=c("liver", "brain", "ovary", "brain", "brain", "liver"),
                tpm=c(5,2,10,1,15,6))

gene.unique <- unique(data$gene)
i <- 1
for (dummy in gene.unique) {
  genes.idx <- which(data$gene == dummy)
  tissue1[i] <- data$tissue[genes.idx[1]]
  tissue2[i] <- data$tissue[genes.idx[2]]
  tpm1[i] <- data$tpm[genes.idx[1]]
  tpm2[i] <- data$tpm[genes.idx[2]]
  i <- i+1
}

data.final <- data.frame(gene=gene.unique, tissue1, tissue2, tpm1, tpm2)

  gene tissue1 tissue2 tpm1 tpm2
1    A   liver   brain    5    2
2    B   ovary   brain   10    1
3    C   brain   liver   15    6

希望对你有所帮助