gpt4 book ai didi

r - 使用 split 函数按因子对数据帧进行分组,大型数据帧的替代方案

转载 作者:行者123 更新时间:2023-12-04 10:52:12 26 4
gpt4 key购买 nike

我有一个关于使用 split 的问题按 factor 对数据进行分组的函数.

我有一个包含两列 snps 和基因的数据框。 Snps 是一个因素,gene是一个字符向量。我想按 snp 因子对基因进行分组,以便我可以看到映射到每个 snp 的基因列表。有些snps可能映射到多个基因,例如rs10000226映射到基因345274和基因5783,基因出现多次。

为此,我使用 split 函数来制作每个 snp 映射到的基因列表。

snps<-c("rs10000185", "rs1000022", "rs10000226", "rs10000226")

gene<-c("5783", "171425", "345274", "5783")

df<-data.frame(snps, gene) # snps is a factor

df$gene<-as.character(df$gene)

splitted=split(df, df$gene, drop=T) # group by gene

snpnames=unique(df$snps)

df.2<-lapply(splitted, function(x) { x["snps"] <- NULL; x }) # remove the snp column

names(df.2)=snpnames # rename the list elements by snp

df.2 = sapply(df.2, function(x) list(as.character(x$gene)))

save(df.2, file="df.2.rda")

然而,这对我的完整数据帧无效(可能是由于它的大小 - 363422 行、281370 个独特的 snps、20888 个独特的基因)并且 R 在稍后尝试加载 df.2.rda` 时崩溃。

任何有关替代方法的建议将不胜感激!

最佳答案

有一种更短的方法来创建您的 df.2 :

genes_by_snp <- split(df$gene,df$snp)

您可以使用 genes_by_snp[["rs10000226"]] 查看给定 snp 的基因。 .

您的数据集对我来说听起来并不大,但是您可以通过以不同方式存储原始数据来避免创建上面的列表。扩展@AnandoMahto 的评论,这里是如何使用 data.table包裹:
require(data.table)

setDT(df)
setkey(df,snps)

您可以使用 df[J("rs10000226")] 查看给定 snp 的基因。 .

关于r - 使用 split 函数按因子对数据帧进行分组,大型数据帧的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29897645/

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