R循环大数据
我有一个大的数据集,我想运行一些代码对一件一件,因为它的大尺寸为我的电脑运行在一次过 这是我到目前为止的代码。。。 我的数据集有gene、MOUNT和count列R循环大数据,r,R,我有一个大的数据集,我想运行一些代码对一件一件,因为它的大尺寸为我的电脑运行在一次过 这是我到目前为止的代码。。。 我的数据集有gene、MOUNT和count列 df <- read.table(file = "/Users/x/x.txt", header = TRUE, sep=",", fill=TRUE, comment.char = "") count_by_gen
df <- read.table(file = "/Users/x/x.txt",
header = TRUE, sep=",", fill=TRUE, comment.char = "")
count_by_gene <-
df %>%
group_by(gene) %>%
summarize(count = n())
df%
汇总(计数=n())
由于数据集太大,我无法导入。有没有办法一件一件地完成这项工作,并为每一件创建一个不同的表(按基因计数)?您可以尝试从NCmisc包中使用file.split
library(NCmisc)
orig.dir <- getwd(); setwd(tempdir()); # move to temporary dir
file.name <- "x.txt"
writeLines(fakeLines(max.lines=1000),con=file.name)
new.files <- file.split(file.name,size=50)
unlink(new.files); unlink(file.name)
setwd(orig.dir) # reset working dir to original
库(NCmisc)
orig.dir您好,您只需加载gene
列即可按gene
计数。对于大数据框架,我还将指导您使用data.table
软件包,该软件包在读取CSV和处理CSV时将更加高效。如果基因名称是字符串,那么将它们作为因子
(存储为整数)加载将进一步减少内存占用
library(data.table)
# fread is data.table's read.table. It is also smart in detecting
# separators otherwise you can still provide them as parameters
dt <- fread("yourfile.txt", select="gene", stringAsFactors=TRUE)
# here we group by "gene" values and compute for each group the
# count (using .N pseudo variable)
# the empty comma at the beginning means that we want all lines
count_by_gene <- dt[, by="gene", list(count = .N)]
库(data.table)
#fread是data.table的read.table。它在探测方面也很聪明
#分隔符,否则仍可以将其作为参数提供
dt这对您有帮助吗?如果整个数据集都存储在本地,那么disk.frame
包可能会很有用。对不起,这对我没有帮助。我需要一件一件地处理它们。我尝试设置一个循环,并使用nrows和skip处理数据。就是无法让代码工作:/n您的数据有多大?多少行和多少列?大约10gb,7列这就是我做的。该文件仍然太大,无法一次性处理。我还想在某个时候将此数据帧与其他数据集合并。更新了我的答案以合并来自不同部分的结果
file_parts <- c("fic1.txt", "fic2.txt", .... )
# compute counts for each part
parts_counts <- lapply(file_parts, function(file) {
dt <- fread(file, select="gene", stringAsFactors=TRUE)
dt[, by="gene", list(count = .N)]
})
# merge part counts in a single table
merged_parts_counts <- rbindlist(parts_counts)
# then total count is sum of part counts
gene_counts <- merged_parts_counts[, by="gene", list(count=sum(count))]