我正在尝试根据列名称将数据集拆分为多个数据集:
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)) %>% ...
并且错误消失了,但过滤仍然无效:我每次迭代都得到零过滤结果。 exprs
数据集的方式如下:
samples
个字符数组之一:
答案 0 :(得分:1)
如果您的数据是21266x24185,则错误表明您可能需要使用t()
转置exprs或示例以获得相同的方向。
R已在您的exprs标头中添加了一个X,因此它们不再与示例中的那些匹配。当读取exprs文件(例如read.csv()
)时,添加参数check.names = F
,这将阻止这一点 - 尽管请谨慎使用,因为语法上无效的标题可能会影响其他函数。有关详细信息,请参阅?make.name
如果仍然无法解决问题,请确认expr中的某些标头确实与样本匹配,以便我们期望输出。
如果您提供的示例包含我们可以复制到R(文本,而不是图像)的格式的匹配数据,如果这不能解决问题,我们可能会提供进一步的帮助。