首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中从长到宽格式的多变量

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

Stack Overflow用户
提问于 2022-03-29 13:41:53
回答 1查看 38关注 0票数 0

我有一张像这样的长桌:

代码语言:javascript
复制
gene  tissue tpm
  A   liver   5
  A   brain   2
  B   ovary   10
  B   brain   1
  C   brain   15
  C   liver   6

我想把它转换成更广泛的格式:

代码语言:javascript
复制
gene tissue1 tissue2 tpm1 tpm2
  A  liver   brain    5    2
  B  ovary   brain    10   1
  C  brain   liver    15   6

我尝试过dcastspread,但是我得到了这样的结果:

代码语言:javascript
复制
gene  liver brain ovary
 A      5     2     NA
 B      NA    1     10
 C      6     15    NA

这不是我想要的。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-30 22:49:08

我不知道有一个函数可以同时用R语言解决这个难题,但是您可以使用for循环来重新排列数据帧。

守则列示如下:

代码语言:javascript
复制
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

希望它能帮到你。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71663176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档