【问题标题】:Split dataset into multiple by column names按列名将数据集拆分为多个
【发布时间】:2018-02-21 18:11:53
【问题描述】:

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

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]

但它给了我另一个错误:

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

更新

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

samples 字符数组之一:

【问题讨论】:

  • 你能发布一个小的dadaset例子吗?足以重现错误的东西。最好使用dput(samples) 或者如果samples 太大dput(head(samples, 20))
  • 请提供一个实际的数据集。否则,你会被否决。

标签: r dplyr grepl


【解决方案1】:

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

编辑:

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

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

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

【讨论】:

  • 是的,但过滤仍然无法按照我的代码中实现的方式工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-26
  • 2013-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多