我有一個目錄,其中包含多個以制表符分隔的檔案(txt 格式)。每個檔案都是一個有很多行的表,但我對第 10 列感興趣。我想提取該列的所有 uniq 值并計算所有檔案的出現次數。為此,我在 bash 中使用了下面的代碼,它可以作業,但是當檔案非常重時,它沒有回應。
awk -F'\t' 'FNR==1{next}
{
n[$10];
if ($10 in a) {
a[$10]=a[$10]","ARGV[ARGIND]
}else{
a[$10]=ARGV[ARGIND]
}
}
END{
printf("%-24s %6s %s\n","Variant","No of repeats","Location");
for (v in n) printf("%-24s m %s\n",v,n[v],a[v])}' * > var_freq.txt
輸出應該是這樣的:
Variant No of repeats Location
variant1 3 file1,file2,file3
variant2 5 file1,file3,file4,file5,file7
variant3 2 file1,file4
可能檔案的標題如下所示:
Chr Start END COL4 COL5 COL6 COL7 COL8 COL9 Variant
1 1234 1345 ABC 123 234 345 456 567 c.1236A>G
任何人都可以告訴我如何用其他可以處理 BigData 的語言來做到這一點?(蟒蛇,R ...)謝謝
uj5u.com熱心網友回復:
這是 R 中的另一個選項:
library(data.table)
file_list <- list.files(pattern = "\\.txt")
myData <- lapply(file_list, \(x){
dat <- fread(x, select = 10) |>
table() |>
data.table()
dat[,file := sub("\\.txt", "", x)]
}) |>
rbindlist()
final <- myData[, .(`No of repeats` = sum(N), Location = paste(file, collapse = ",")),
by = list(Variant = V1)]
print(final)
uj5u.com熱心網友回復:
在 R 中
加載這些包:
library(dplyr)
library(purrr)
library(tibble)
然后,假設您有一個files帶有檔案名的向量,您可以通過以下方式找到變體的計數:
files %>%
purrr::map_dfr(
\(file) {
read.delim(file) %>%
select(10) %>%
table() %>%
enframe(name = "Variant", value = "N") %>%
mutate(Location = file)
}
) %>%
group_by(Variant) %>%
summarize(`N° of repeats` = sum(N),
Location = paste0(Location, collapse = ","),
.groups = "drop")
您可以使用以下命令從 R 控制臺安裝依賴項:
install.packages(c("dplyr", "purrr", "tibble"))
uj5u.com熱心網友回復:
在基礎 R
mydir <- "/location/of/my/dir"
files <- list.files(filedir, pattern = "*.txt", full.names = TRUE)
variants <- lapply(seq_along(files), \(i) data.frame(
"Location" = basename(files[i]),
"Variant" = unique(read.delim(files[i])[,10])
))
output <- aggregate(Location~Variant, do.call(rbind, variants), paste, sep=",")
output$Nrepeats <- nchar(gsub("[^,]", "", output$Location)) 1
> output
Variant Location Nrepeats
1 variant1 file1.csv, file3.csv 2
2 variant2 file1.csv, file2.csv 2
3 variant3 file1.csv 1
4 variant4 file1.csv, file2.csv, file3.csv 3
5 variant5 file2.csv 1
6 variant6 file2.csv, file3.csv 2
7 variant9 file3.csv 1
- 創建檔案名向量
- 對于每個檔案名,創建一個資料框,如下所示:
> variants[[1]]
Location Variant
1 file1.csv variant1
2 file1.csv variant2
3 file1.csv variant3
4 file1.csv variant4
- 將所有資料框粘在一起并按變體聚合(每個變體只剩下一行)
- 計算要填充 Nrepeats 的檔案名數量(這有點低效,您可以使用兩個單獨的聚合或 tapplys 代替)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/531260.html
標籤:Pythonr循环数数
上一篇:在多列上使用函式進行變異
下一篇:使用R在PDF中空間影像
