从长格式到宽格式 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
我试过 dcast
和 spread
但我得到了这个结果:
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
希望对你有所帮助
我有一个像这样的长格式的 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
我试过 dcast
和 spread
但我得到了这个结果:
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
希望对你有所帮助