首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在R中转换多个样本的数据

在R中转换多个样本的数据
EN

Stack Overflow用户
提问于 2021-04-29 07:52:37
回答 2查看 52关注 0票数 2

我有一个包含多个样本的大型数据帧列表,例如下面显示的示例代码。

我已经设法按类型(蛋白质或mRNA)对它们进行了子集,但现在我想将数据转换为一个表,第一列是sample_ID (每个样本占一行),顶部是蛋白质/mRNA的名称(因为样本有几个相同蛋白质/mRNA的表达值),然后是每个样本行中的蛋白质/mRNA的表达值。

任何帮助都将不胜感激,谢谢!

代码语言:javascript
运行
复制
#Example data
sample_8765 <- data.frame(type = c("protein", "mRNA", "mRNA", "mRNA", "protein"),
                      name = c("DIABLO", "X1345", "X1234", "F1234", "p53"),
                      expression = c("1.23", "4.265", "3.44", "6.43", "8.00"))

sample_8901 <- data.frame(type = c("protein", "mRNA", "protein","mRNA", "protein"),
                      name = c("DIABLO", "X1345", "SMAC", "F4657", "MDM2"),
                      expression = c("3.24", "5.33", "4.35", "6.78", "9.11"))

sample_9084 <- data.frame(type = c("protein", "protein", "mRNA", "mRNA", "mRNA"),
                      name = c("SMAC", "DIABLO", "X1345", "F4657", "X1234" ),
                      expression = c("2.56", "8.11", "4.35", "6.78", "9.11"))
sample_ID <- c("sample_8765","sample_8901","sample3_9084")

#subseting by type 
library(dplyr)
bind_rows(mget(paste0(sample_ID))) %>%
  split(.$type) %>%
  list2env(.GlobalEnv)

mRNA 
#type  name expression
#2  mRNA X1345      4.265
#3  mRNA X1234       3.44
#4  mRNA F1234       6.43
#7  mRNA X1345       5.33
#9  mRNA F4657       6.78
#13 mRNA X1345       4.35
#14 mRNA F4657       6.78
#15 mRNA X1234       9.11

我希望看到的输出是这样的:

代码语言:javascript
运行
复制
protein

sample_ID   DIABLO SMAC  X1345  F4657  X1234
sample_8765 1.23.  NA    4.265. 9.11.  3.44
sample_8901 3.24.  4.35  4.265. NA.    NA
sample_9084 8.11.  2.56  4.35.  6.78.  9.11
EN

回答 2

Stack Overflow用户

发布于 2021-04-29 09:26:32

bind_rows有一个名为.id的参数,它允许用户指定一个列名,该列名将显示列表中数据框的名称,因此只需稍微修改代码,我们就可以实现您所描述的内容。

代码语言:javascript
运行
复制
library(dplyr)
bind_rows(mget(paste0(sample_ID)), .id = "Sample_ID") %>%
  pivot_wider(names_from = "name", values_from = "expression") %>%
  split(.$type) %>%
  list2env(.GlobalEnv)
票数 2
EN

Stack Overflow用户

发布于 2021-04-29 16:30:47

这是必需的吗?

代码语言:javascript
运行
复制
purrr::imap_dfr(mget(paste0(sample_ID)), ~ .x %>% mutate(sample_id = .y)) %>%
  pivot_wider(id_cols = sample_id, values_from = expression, names_from = name)

# A tibble: 3 x 9
  sample_id   DIABLO X1345 X1234 F1234 p53   SMAC  F4657 MDM2 
  <chr>       <chr>  <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 sample_8765 1.23   4.265 3.44  6.43  8.00  NA    NA    NA   
2 sample_8901 3.24   5.33  NA    NA    NA    4.35  6.78  9.11 
3 sample_9084 8.11   4.35  9.11  NA    NA    2.56  6.78  NA
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67309315

复制
相关文章

相似问题

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