【发布时间】:2015-04-27 13:48:48
【问题描述】:
我有一个关于使用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 时崩溃。
任何关于替代方法的建议将不胜感激!
【问题讨论】:
-
你为什么不使用“data.table”,只需按“snps”列键。然后您可以轻松检查不同的值。
-
您的
split没有“列出每个 snp 映射到的基因列表”。它的作用正好相反:按基因分组(split的第二个参数)。 -
分手后你打算怎么处理?您真正需要的输出是什么?
-
您可能需要向我们提供可重现的数据样本。
factor变量乱七八糟,分不清哪一列是哪个类。 -
你的最终结果和
split(df$gene,df$snp)一样。这就是你要找的东西吗?