gpt4 book ai didi

r - 有效地将两列 data.table 转换为列表

转载 作者:行者123 更新时间:2023-12-05 09:26:40 25 4
gpt4 key购买 nike

我正在为 R 中的这个问题寻找一个快速但可读的解决方案。最好的解决方案应该使用 data.table 包或不使用其他包,尽管我想听听其他选项.

我有一个包含两列的 data.table:

dat
go_id gene_id
1: A a
2: A b
3: B c
4: B d
5: B e
6: C f
7: C g
8: C h
9: C i
10: C j

您可以通过以下方式重现它:

library(data.table)

dat <- data.table(
go_id=rep(LETTERS[1:3], times=c(2,3,5))
)
dat[, gene_id := letters[1:nrow(dat)]]

我需要将其转换为一个列表,其中每个“键”是一个 go_id,“值”是分配给该 go_id 的基因向量。也就是说,输出应该是这个列表:

$A
[1] "a" "b"

$B
[1] "c" "d" "e"

$C
[1] "f" "g" "h" "i" "j"

如果重要的话,基因可以关联到多个 go_id。真实数据大约有 280000 行,其中包含 17000 个不同的 go_id 和 16000 个不同的基因。

这是我目前的解决方案 - 在速度和/或可读性方面有什么更好的吗?

dat <- dat[, list(gene_id=list(gene_id)), by=go_id]
go_ids <- dat$go_id
go_list <- list()
for(i in 1:nrow(dat)) {
go <- go_ids[i]
genes <- dat[i,]$gene_id
go_list[go] <- genes
}

最佳答案

没有 data.table 或任何其他包,这将完成任务:

tapply(dat$gene_id, dat$go_id, FUN = c)

关于r - 有效地将两列 data.table 转换为列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73634484/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com