问题描述
我有一组 270 个 RNA-seq 样本,我已经使用以下代码对它们的预期计数进行了子集化:
for (i in 1:length(sample_ID_list)) {
assign(sample_ID_list[i],subset(get(sample_file_list[i]),select = expected_count))
}
其中,sample_ID_list 是每个样本 ID 的字符列表(例如,313312664),而 sample_file_list 是我的环境中已存在要进行子集化的每个样本的文件名的字符列表(例如,s313312664)。
现在,这些子集样本之一的头部如下所示:
> head(`308087571`)
# A tibble: 6 x 1
expected_count
<dbl>
1 129
2 8
3 137
4 6230.
5 1165.
6 0
问题是我想将所有这些列表粘贴在一起以制作计数数据框,但我将无法区分没有样本 ID 作为列名而不是 expected_count 的列。
有人知道解决这个问题的好方法吗?如果您需要更多详细信息,请告诉我!
解决方法
如果我们想命名 list
,循环遍历 list
,提取 'expected_count' ('nm1') 的第一个元素并使用它来分配 names
list
nm1 <- sapply(sample_file_list,function(x) x$expected_count[1])
names(sample_file_list) <- nm1
或来自sample_ID_list
do.call(rbind,Map(cbind,mget(sample_ID_list),name = sample_ID_list))
更新
根据评论,我们可以使用 Map
遍历 'sample_file_list' 和 'sample_ID_list',并使用来自 'sample_ID_list' 的相应值重命名 'expected_count' 列
sample_file_list2 <- Map(function(dat,nm) {
names(dat)[match('expected_count',names(dat))] <- nm
dat
},sample_file_list,sample_ID_list)
或者如果我们需要一揽子解决方案,
library(data.table)
rbindlist(mget(sample_ID_list),idcol = name)
,
您可以使用:
dplyr::bind_rows(mget(sample_ID_list),.id = name)
,
更新: 非常感谢大家的帮助。我必须按如下方式更新我的 for 循环:
for (i in 1:length(sample_ID_list)) {
assign(sample_ID_list[i],subset(get(sample_file_list[i]),select = expected_count))
data<- get(sample_ID_list[i])
colnames(data)<- sample_ID_list[i]
assign(sample_ID_list[i],data)
}
并且能够成功地重新分配名称!