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

时间:2018-02-21 18:11:54

标签: r dplyr grepl

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

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数组,其中包含需要在每次迭代时选择的不同列名。上面的代码我收到一个错误:

enter image description here

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

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

但它给了我另一个错误:

enter image description here

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

  

更新

我尝试转置exprs数据集:as.data.frame(t(exprs)) %>% ...并且错误消失了,但过滤仍然无效:我每次迭代都得到零过滤结果。 exprs数据集的方式如下:

enter image description here

samples个字符数组之一:

enter image description here

1 个答案:

答案 0 :(得分:1)

如果您的数据是21266x24185,则错误表明您可能需要使用t()转置exprs或示例以获得相同的方向。

编辑:

R已在您的exprs标头中添加了一个X,因此它们不再与示例中的那些匹配。当读取exprs文件(例如read.csv())时,添加参数check.names = F,这将阻止这一点 - 尽管请谨慎使用,因为语法上无效的标题可能会影响其他函数。有关详细信息,请参阅?make.name

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

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