按列名将数据集拆分为多个

Split dataset into multiple by column names

我正在尝试根据列名将数据集拆分为多个数据集:

for(i in 1:nrow(column_vals)){
  dataset_filtered <- dataset_metadata %>% 
  filter(characteristics..strain == column_vals[i,1], 
                          characteristics..age == column_vals[i,2])
  samples <- dataset_filtered[,1]
  samples <- substr(samples, 1, 22)
  exprs_filtered <- as.data.frame(exprs) %>% filter(colnames(exprs) %in% 
 samples)
  saveRDS(exprs_filtered, paste0(path, i, sep=""))
} 

samples 是一个 character 数组,其中包含每次迭代时需要选择的不同列名。使用上面的代码我得到一个错误:

exprs 的尺寸为 21266x24185。我尝试使用 grepl 函数:

is.in <- grepl(paste(colnames(exprs), collapse="|"), samples)
exprs_filtered <- exprs[, is.in]

但它又给我一个错误:

我在这里做错了什么?如何解决问题?任何建议将不胜感激。

Update

我尝试转置 exprs 数据集:as.data.frame(t(exprs)) %>% ... 并且错误消失了,但过滤仍然不起作用:每次迭代我得到零过滤结果。 exprs 数据集如下所示:

samples 字符数组之一:

如果您的数据是 21266x24185,该错误表明您可能需要使用 t() 转置表达式或样本以获得相同的方向。

编辑:

R 已将 X 附加到您的表达式 headers,因此它们不再与示例中的匹配。在读取 exprs 文件时(例如 read.csv())添加参数 check.names = F,这将防止这种情况发生 - 但要谨慎使用,因为语法无效 headers 可能会影响其他功能。有关详细信息,请参阅 ?make.name

如果这仍然不能解决问题,请确认 expr 中的某些 headers 确实匹配样本,以便我们期待输出。

如果您提供的示例包含我们可以复制到 R 中的格式的匹配数据(文本,而不是图像),如果这不能解决问题,我们可能会进一步提供帮助。