我有一个包含多个样本的大型数据帧列表,例如下面显示的示例代码。
我已经设法按类型(蛋白质或mRNA)对它们进行了子集,但现在我想将数据转换为一个表,第一列是sample_ID (每个样本占一行),顶部是蛋白质/mRNA的名称(因为样本有几个相同蛋白质/mRNA的表达值),然后是每个样本行中的蛋白质/mRNA的表达值。
任何帮助都将不胜感激,谢谢!
#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我希望看到的输出是这样的:
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发布于 2021-04-29 09:26:32
bind_rows有一个名为.id的参数,它允许用户指定一个列名,该列名将显示列表中数据框的名称,因此只需稍微修改代码,我们就可以实现您所描述的内容。
library(dplyr)
bind_rows(mget(paste0(sample_ID)), .id = "Sample_ID") %>%
pivot_wider(names_from = "name", values_from = "expression") %>%
split(.$type) %>%
list2env(.GlobalEnv)发布于 2021-04-29 16:30:47
这是必需的吗?
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 NAhttps://stackoverflow.com/questions/67309315
复制相似问题