r语言 - 如何修复突变时,试图从多个数据集创建单个矩阵的错误



我试图采取包括基因和表达数据的多个数据集(每个数据集= 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))

我找到了问题所在。这是因为我没有正确地制作数据框列表。相反,我使用了下面的代码,然后代码就工作了。

dflist <- lapply(file_names, read.csv, sep="t")