如何使列表的名称成为其列的名称?
How do I make the name of a list the name of its column?
我有一组 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',并用 [=34] 中的相应值重命名 '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)
}
并且能够成功重新分配名称!
我有一组 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',并用 [=34] 中的相应值重命名 '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)
}
并且能够成功重新分配名称!