Python chia thành các khoảng

Tôi có một câu hỏi liên quan đến cách tôi có thể sử dụng một phạm vi đã cho để chia nó thành các khoảng có độ dài tối đa là 100. Tôi đang tìm cách làm điều này trong AWK, Shell Script, Perl hoặc Python. Chỉ để hiển thị một ví dụ nhỏ, tôi có một tệp được phân định bằng tab có chứa

  • Số nhiễm sắc thể [1 đến 23]
  • phạm vi bắt đầu
  • phạm vi kết thúc
  • ID của phạm vi
  • Số cho biết phạm vi phải được chia bao nhiêu lần

Cái này nó thì trông như thế nào

chr1    37850      38536      MACS_peak_1    7
chr1    820769     821857     MACS_peak_4    11
chr1    5018483    5019041    MACS_peak_9    6

Và sau khi lấy từng phạm vi và chia chúng thành 100 khoảng thời gian, đầu ra sẽ như thế này. Hai cột cuối cùng không quan trọng bằng việc thu được phạm vi được chia tách và tôi đã trình bày ví dụ này để chỉ ra số lượng phần tách và độ dài của phần tách tương ứng

chr1    37850    37950    1    100
chr1    37951    38051    2    100
chr1    38052    38152    3    100
chr1    38153    38253    4    100
chr1    38254    38354    5    100
chr1    38355    38455    6    100
chr1    38456    38536    7    80
chr1    820769    820869    1    100
chr1    820870    820970        2    100
chr1    820971    821071        3    100
chr1    821072    821172        4    100
chr1    821173    821273        5    100
chr1    821274    821374        6    100
chr1    821375    821475        7    100
chr1    821476    821576        8    100
chr1    821577    821677        9    100
chr1    821678    821778        10    100
chr1    821779    821857        11    78
chr1    5018483    5018583    1    100
chr1    5018584    5018684    2    100
chr1    5018685    5018785    3    100
chr1    5018786    5018886    4    100
chr1    5018887    5018987    5    100
chr1    5018988    5019041    6    53
perl python awk chip-seq • 12 nghìn lượt xem

THÊM NHẬN XÉT • liên kết đã cập nhật 10. 1 năm trước bởi Aaronquinlan 11k • được viết 10. 1 năm trước bởi daniel. soronella ▴ 330

1

Vào chế độ chỉnh sửa

Bạn đang cố gắng làm gì?

THÊM TRẢ LỜI • liên kết 10. 1 năm trước bởi Irsan ★ 7. 6k

0

Vào chế độ chỉnh sửa

có vẻ như chúng tôi có một lỗi khoảng trắng mà chúng tôi sẽ sớm khắc phục

THÊM TRẢ LỜI • liên kết 10. 1 năm trước bởi Istvan Albert 96k

0

Vào chế độ chỉnh sửa

Tôi thấy rằng tab được phân tách dường như không được nhận dạng nên tôi phải đặt ví dụ ở định dạng 4 dấu cách

THÊM TRẢ LỜI • liên kết 10. 1 năm trước bởi daniel. soronellas ▴ 330

8

Vào chế độ chỉnh sửa

10. 1 năm trước

Andrzej Zielezinski 11k

Trong Python

fh = open['input_file.txt']
out = open['output_file.txt','w']

def chunk_range[x1, x2, numb]:
    size = [[x2 - x1 + 1 ] / numb] + 1
    while x1 1]cbind[covList[[i]]]]]

# writing the file out
write.table[final,'bedGraph_expanded.tsv',sep='\t',row.names=F,quote=F]

đầu ra

chrom  start    end seq reads
1   chr1  37850  37950   1   100
2   chr1  37951  38051   2   100
3   chr1  38052  38152   3   100
4   chr1  38153  38253   4   100
5   chr1  38254  38354   5   100
6   chr1  38355  38455   6   100
7   chr1  38456  38536   7    80
8   chr1 820769 820869   1   100
9   chr1 820870 820970   2   100
10  chr1 820971 821071   3   100
11  chr1 821072 821172   4   100
12  chr1 821173 821273   5   100
13  chr1 821274 821374   6   100
14  chr1 821375 821475   7   100
15  chr1 821476 821576   8   100
16  chr1 821577 821677   9   100
17  chr1 821678 821778  10   100
18  chr1 821779 821857  11    78

Bạn có thể lưu toàn bộ tập lệnh và sử dụng dưới dạng

chr1    37850    37950    1    100
chr1    37951    38051    2    100
chr1    38052    38152    3    100
chr1    38153    38253    4    100
chr1    38254    38354    5    100
chr1    38355    38455    6    100
chr1    38456    38536    7    80
chr1    820769    820869    1    100
chr1    820870    820970        2    100
chr1    820971    821071        3    100
chr1    821072    821172        4    100
chr1    821173    821273        5    100
chr1    821274    821374        6    100
chr1    821375    821475        7    100
chr1    821476    821576        8    100
chr1    821577    821677        9    100
chr1    821678    821778        10    100
chr1    821779    821857        11    78
chr1    5018483    5018583    1    100
chr1    5018584    5018684    2    100
chr1    5018685    5018785    3    100
chr1    5018786    5018886    4    100
chr1    5018887    5018987    5    100
chr1    5018988    5019041    6    53
3

Chúc mừng

THÊM NHẬN XÉT • liên kết 10. 1 năm trước bởi Sukhi Singh 11k

4

Vào chế độ chỉnh sửa

10. 1 năm trước

qiyunzhu ▴ 430

Đây là giải pháp Perl của tôi

________số 8

Đầu ra phải giống hệt như trong câu hỏi của bạn

Và đây là mã Perl để làm cho các khoảng đều nhau

my $input = "
chr1    37850      38536      MACS_peak_1    7
chr1    820769     821857     MACS_peak_4    11
chr1    5018483    5019041    MACS_peak_9    6
";

foreach [split [/\n/, $input]]{
    next unless $_;
    my [$chr, $start, $end, $id, $times] = split [/\s+/];
    my $range = int[[$end-$start]/$times];
    foreach [1..$times-1]{
        print $chr."\t".[$start+$range*[$_-1]]."\t".[$start+$range*$_-1]."\t$_\t".[$range-1]."\n";
    }
    print $chr."\t".[$start+$range*[$times-1]]."\t$end\t$times\t".[$end-$start-$range*[$times-1]-1]."\n";
}

THÊM NHẬN XÉT • liên kết 10. 1 năm trước bởi qiyunzhu ▴ 430

4

Vào chế độ chỉnh sửa

10. 1 năm trước

Aaronquinlan 11k

chr1    37850    37950    1    100
chr1    37951    38051    2    100
chr1    38052    38152    3    100
chr1    38153    38253    4    100
chr1    38254    38354    5    100
chr1    38355    38455    6    100
chr1    38456    38536    7    80
chr1    820769    820869    1    100
chr1    820870    820970        2    100
chr1    820971    821071        3    100
chr1    821072    821172        4    100
chr1    821173    821273        5    100
chr1    821274    821374        6    100
chr1    821375    821475        7    100
chr1    821476    821576        8    100
chr1    821577    821677        9    100
chr1    821678    821778        10    100
chr1    821779    821857        11    78
chr1    5018483    5018583    1    100
chr1    5018584    5018684    2    100
chr1    5018685    5018785    3    100
chr1    5018786    5018886    4    100
chr1    5018887    5018987    5    100
chr1    5018988    5019041    6    53
4 có một tiện ích gọi là
chr1    37850    37950    1    100
chr1    37951    38051    2    100
chr1    38052    38152    3    100
chr1    38153    38253    4    100
chr1    38254    38354    5    100
chr1    38355    38455    6    100
chr1    38456    38536    7    80
chr1    820769    820869    1    100
chr1    820870    820970        2    100
chr1    820971    821071        3    100
chr1    821072    821172        4    100
chr1    821173    821273        5    100
chr1    821274    821374        6    100
chr1    821375    821475        7    100
chr1    821476    821576        8    100
chr1    821577    821677        9    100
chr1    821678    821778        10    100
chr1    821779    821857        11    78
chr1    5018483    5018583    1    100
chr1    5018584    5018684    2    100
chr1    5018685    5018785    3    100
chr1    5018786    5018886    4    100
chr1    5018887    5018987    5    100
chr1    5018988    5019041    6    53
5 sẽ thực hiện chính xác điều này. Có vẻ như cột thứ 5 trong tệp của bạn là không cần thiết, vì bạn thực sự chỉ đang tạo các cửa sổ 100bp từ các khoảng thời gian ban đầu. Một lưu ý trong ví dụ của bạn là tọa độ bắt đầu của bạn cao hơn một so với mức bình thường vì tọa độ bắt đầu BED dựa trên 0, trong khi tọa độ kết thúc là dựa trên 1. Tôi hi vọng cái này giúp được

chr1    37850    37950    1    100
chr1    37951    38051    2    100
chr1    38052    38152    3    100
chr1    38153    38253    4    100
chr1    38254    38354    5    100
chr1    38355    38455    6    100
chr1    38456    38536    7    80
chr1    820769    820869    1    100
chr1    820870    820970        2    100
chr1    820971    821071        3    100
chr1    821072    821172        4    100
chr1    821173    821273        5    100
chr1    821274    821374        6    100
chr1    821375    821475        7    100
chr1    821476    821576        8    100
chr1    821577    821677        9    100
chr1    821678    821778        10    100
chr1    821779    821857        11    78
chr1    5018483    5018583    1    100
chr1    5018584    5018684    2    100
chr1    5018685    5018785    3    100
chr1    5018786    5018886    4    100
chr1    5018887    5018987    5    100
chr1    5018988    5019041    6    53
2

nếu bạn thực sự muốn bỏ qua một cơ sở giữa mỗi khoảng thời gian, bạn sẽ cần thay đổi câu lệnh awk. Nhưng tôi nghĩ rằng đây là những gì bạn muốn. Để kiểm soát, hãy tải tệp của bạn vào UCSC và xem các cửa sổ trông như thế nào

THÊM NHẬN XÉT • liên kết 10. 1 năm trước bởi Aaronquinlan 11k

0

Vào chế độ chỉnh sửa

Vấn đề duy nhất là dòng tiếp theo không được bù từ dòng cuối cùng. Bạn có thể muốn kiểm tra lại đầu ra dự kiến

THÊM TRẢ LỜI • liên kết 10. 1 năm trước bởi steve ▴ 40

0

Vào chế độ chỉnh sửa

Linh cảm của tôi là OP không có ý định tạo các cửa sổ GIƯỜNG bỏ qua một cơ sở giữa mỗi cửa sổ. Nếu cố ý, một thay đổi rất nhỏ đối với câu lệnh awk sẽ giải quyết vấn đề này. Cập nhật để chứng minh

THÊM TRẢ LỜI • liên kết 10. 1 năm trước bởi Aaronquinlan 11k

0

Vào chế độ chỉnh sửa

Có vẻ như bạn đúng - bạn thấy đấy, tôi không có bất kỳ kinh nghiệm nào với tệp BED hoặc

chr1    37850    37950    1    100
chr1    37951    38051    2    100
chr1    38052    38152    3    100
chr1    38153    38253    4    100
chr1    38254    38354    5    100
chr1    38355    38455    6    100
chr1    38456    38536    7    80
chr1    820769    820869    1    100
chr1    820870    820970        2    100
chr1    820971    821071        3    100
chr1    821072    821172        4    100
chr1    821173    821273        5    100
chr1    821274    821374        6    100
chr1    821375    821475        7    100
chr1    821476    821576        8    100
chr1    821577    821677        9    100
chr1    821678    821778        10    100
chr1    821779    821857        11    78
chr1    5018483    5018583    1    100
chr1    5018584    5018684    2    100
chr1    5018685    5018785    3    100
chr1    5018786    5018886    4    100
chr1    5018887    5018987    5    100
chr1    5018988    5019041    6    53
4. Tuy nhiên, tôi không nghĩ rằng thay đổi nhỏ mà bạn đã thực hiện đối với lệnh
chr1    37850    37950    1    100
chr1    37951    38051    2    100
chr1    38052    38152    3    100
chr1    38153    38253    4    100
chr1    38254    38354    5    100
chr1    38355    38455    6    100
chr1    38456    38536    7    80
chr1    820769    820869    1    100
chr1    820870    820970        2    100
chr1    820971    821071        3    100
chr1    821072    821172        4    100
chr1    821173    821273        5    100
chr1    821274    821374        6    100
chr1    821375    821475        7    100
chr1    821476    821576        8    100
chr1    821577    821677        9    100
chr1    821678    821778        10    100
chr1    821779    821857        11    78
chr1    5018483    5018583    1    100
chr1    5018584    5018684    2    100
chr1    5018685    5018785    3    100
chr1    5018786    5018886    4    100
chr1    5018887    5018987    5    100
chr1    5018988    5019041    6    53
7 của mình sẽ hoạt động như dự kiến. Bạn đã kiểm tra mã?

THÊM TRẢ LỜI • liên kết 10. 1 năm trước bởi steve ▴ 40

0

Vào chế độ chỉnh sửa

Bạn đúng. Đã xóa phần chỉnh sửa với giả định rằng đây là điều họ muốn

THÊM TRẢ LỜI • liên kết 10. 1 năm trước bởi Aaronquinlan 11k

3

Vào chế độ chỉnh sửa

10. 1 năm trước

steve ▴ 40

Tôi đã làm theo điều này từ đây

chr1    37850    37950    1    100
chr1    37951    38051    2    100
chr1    38052    38152    3    100
chr1    38153    38253    4    100
chr1    38254    38354    5    100
chr1    38355    38455    6    100
chr1    38456    38536    7    80
chr1    820769    820869    1    100
chr1    820870    820970        2    100
chr1    820971    821071        3    100
chr1    821072    821172        4    100
chr1    821173    821273        5    100
chr1    821274    821374        6    100
chr1    821375    821475        7    100
chr1    821476    821576        8    100
chr1    821577    821677        9    100
chr1    821678    821778        10    100
chr1    821779    821857        11    78
chr1    5018483    5018583    1    100
chr1    5018584    5018684    2    100
chr1    5018685    5018785    3    100
chr1    5018786    5018886    4    100
chr1    5018887    5018987    5    100
chr1    5018988    5019041    6    53
0

Đây là một cách sử dụng

chr1    37850    37950    1    100
chr1    37951    38051    2    100
chr1    38052    38152    3    100
chr1    38153    38253    4    100
chr1    38254    38354    5    100
chr1    38355    38455    6    100
chr1    38456    38536    7    80
chr1    820769    820869    1    100
chr1    820870    820970        2    100
chr1    820971    821071        3    100
chr1    821072    821172        4    100
chr1    821173    821273        5    100
chr1    821274    821374        6    100
chr1    821375    821475        7    100
chr1    821476    821576        8    100
chr1    821577    821677        9    100
chr1    821678    821778        10    100
chr1    821779    821857        11    78
chr1    5018483    5018583    1    100
chr1    5018584    5018684    2    100
chr1    5018685    5018785    3    100
chr1    5018786    5018886    4    100
chr1    5018887    5018987    5    100
chr1    5018988    5019041    6    53
7

chr1    37850    37950    1    100
chr1    37951    38051    2    100
chr1    38052    38152    3    100
chr1    38153    38253    4    100
chr1    38254    38354    5    100
chr1    38355    38455    6    100
chr1    38456    38536    7    80
chr1    820769    820869    1    100
chr1    820870    820970        2    100
chr1    820971    821071        3    100
chr1    821072    821172        4    100
chr1    821173    821273        5    100
chr1    821274    821374        6    100
chr1    821375    821475        7    100
chr1    821476    821576        8    100
chr1    821577    821677        9    100
chr1    821678    821778        10    100
chr1    821779    821857        11    78
chr1    5018483    5018583    1    100
chr1    5018584    5018684    2    100
chr1    5018685    5018785    3    100
chr1    5018786    5018886    4    100
chr1    5018887    5018987    5    100
chr1    5018988    5019041    6    53
1

Kết quả

chr1    37850    37950    1    100
chr1    37951    38051    2    100
chr1    38052    38152    3    100
chr1    38153    38253    4    100
chr1    38254    38354    5    100
chr1    38355    38455    6    100
chr1    38456    38536    7    80
chr1    820769    820869    1    100
chr1    820870    820970        2    100
chr1    820971    821071        3    100
chr1    821072    821172        4    100
chr1    821173    821273        5    100
chr1    821274    821374        6    100
chr1    821375    821475        7    100
chr1    821476    821576        8    100
chr1    821577    821677        9    100
chr1    821678    821778        10    100
chr1    821779    821857        11    78
chr1    5018483    5018583    1    100
chr1    5018584    5018684    2    100
chr1    5018685    5018785    3    100
chr1    5018786    5018886    4    100
chr1    5018887    5018987    5    100
chr1    5018988    5019041    6    53
2

THÊM NHẬN XÉT • liên kết 10. 1 năm trước bởi steve ▴ 40

0

Vào chế độ chỉnh sửa

+1 Awk thực sự mạnh mẽ. ]

THÊM TRẢ LỜI • liên kết 10. 1 năm trước bởi Sukhi Singh 11k

0

Vào chế độ chỉnh sửa

10. 1 năm trước

daniel. soronellas ▴ 330

Cảm ơn mọi người vì sự giúp đỡ của bạn. nó đã làm việc. . ]

THÊM NHẬN XÉT • liên kết 10. 1 năm trước bởi daniel. soronellas ▴ 330

0

Vào chế độ chỉnh sửa

Đây không phải là câu trả lời, vì vậy bạn nên đặt nó làm nhận xét trong câu hỏi ban đầu của mình và xóa "câu trả lời" này. Rất vui vì bạn đã tìm ra giải pháp cho vấn đề của mình

Chủ Đề