r - 尝试从多个数据集创建单个矩阵时如何修复 mutate 错误
问题描述
我正在尝试获取多个数据集(每个数据集 = 1 名患者),其中包括基因和表达数据,并制作一个奇异矩阵,其中基因作为列名,每一行是相应患者的表达数据。问题是有些患者有基因,而其他人没有,所以没有参考。
理想情况下,我想要下面的输出。
Dataset 1 Dataset 2
Gene expression Gene expression
a 0.3 a 0.1
b 0.1 c -0.3
e 0.2 d 0.05
f 0.2 f -0.1
Ideal Output:
a b c d e f
1 0.3 0.1 NA NA 0.2 0.2
2 0.1 NA -0.3 0.05 NA -0.1
另一位用户 (@mikebader) 帮助创建了一个可能的解决方案:
file_names <- list.files(data_dir)
###Making dataframe list
dflist <- list()
for (i in file_names){
dflist <- append(dflist, read.csv(i, sep="\t"))
}
###Creating merged DF
df <- bind_rows(
lapply(seq_along(dflist), function(x) mutate(dflist[[x]], dataset = x))
) %>%
pivot_wider(id_cols = "dataset", names_from = Gene, values_from = expression)
但是,当我尝试执行此操作时,出现以下错误。
Error in UseMethod("mutate") :
no applicable method for 'mutate' applied to an object of class "character"
我不确定我应该采取的下一步是什么?
解决方案
id
您可以将数据框放在列表中,将它们与唯一列绑定在一起,并用于pivot_wider
获取宽格式的数据。
library(dplyr)
library(tidyr)
dflist <- list(df1, df2)
bind_rows(dflist, .id = 'id') %>%
arrange(Gene) %>%
pivot_wider(names_from = Gene, values_from = expression)
# id a b c d e f
# <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 1 0.3 0.1 NA NA 0.2 0.2
#2 2 0.1 NA -0.3 0.05 NA -0.1
数据
df1 <- structure(list(Gene = c("a", "b", "e", "f"), expression = c(0.3,
0.1, 0.2, 0.2)), class = "data.frame", row.names = c(NA, -4L))
df2 <- structure(list(Gene = c("a", "c", "d", "f"), expression = c(0.1,
-0.3, 0.05, -0.1)), class = "data.frame", row.names = c(NA, -4L))
推荐阅读
- rust - 在将数据库行的所有字段解析为结构之前检查它们时无法推断类型
- background - 如何在后台从命令行打开程序(在已打开的窗口下方)?
- php - 无法运行“php artisan migrate”
- angular - 角度反应表单验证模板解析错误
- python - 在 Flask 中对模型的 ClassMethod 进行单元测试
- kubernetes - 如何处理 kubernetes 中 kafka 和 zookeeper 的故障场景
- java - 如何使用 Google Play 服务创建排名?
- html - 我如何从代码中调用指令 ngxPrint(角度 7)
- javascript - 为什么 YouTube 播放器 API 循环不起作用?
- jquery - 将javascript值传递给html输入标签