ฉันต้องการแยกแถวเฉพาะจากคอลัมน์เฉพาะจากตารางต่างๆ ตามส่วนหัวของคอลัมน์ อย่างไรก็ตาม ความรู้ของฉันดูเหมือนจะจำกัดเกินไปที่จะแก้ปัญหาด้วยตัวเอง (ทั้งใน command-line และ python)
ฉันมีไดเร็กทอรีที่มีไฟล์ .tsv (ตาราง OTU) จำนวนมากขึ้นเรื่อยๆ ไฟล์เหล่านี้ทั้งหมดมีเค้าโครงเดียวกัน:
- แถวที่ 1 มีส่วนหัว
- แถว 2 - x มีข้อมูล จำนวนคอลัมน์อาจแตกต่างกันระหว่างไฟล์
- คอลัมน์ 1 มีรหัส OTU เสมอ
- คอลัมน์สุดท้ายประกอบด้วย Taxonomy เสมอ
ไฟล์รูปแบบข้อความจะอยู่ด้านล่าง
ตัวอย่างเช่น ไฟล์ 1 จะมีลักษณะดังนี้:
OTU_id |
20210801_sampleA |
20210801_sampleB |
20210801_sampleค |
อนุกรมวิธาน |
โอทูอา |
5 |
1 |
0 |
ฮันส์เท่มาก |
โอทูบี |
2 |
0 |
0 |
แพทริเซียมีดวงตาสีฟ้า |
โอทูเอฟ |
0 |
6 |
2 |
รัตเกอร์คือบาร์ตจริงๆ |
otuZ |
1 |
3 |
0 |
เฟลิกซ์หายไป |
ไฟล์ 2 มีลักษณะดังนี้:
OTU_id |
20211111_sampleT |
20211111_sampleG |
20211111_sampleA |
อนุกรมวิธาน |
โอทูอา |
0 |
3 |
3 |
ฮันส์เท่มาก |
โอทูบี |
2 |
1 |
0 |
แพทริเซียมีดวงตาสีฟ้า |
โอทูพี |
1 |
6 |
0 |
โทมัสยอดเยี่ยมมาก |
โอทู |
2 |
22 |
56 |
อันนาและเอลซ่า |
otuZ |
1 |
8 |
4 |
เฟลิกซ์หายไป |
แน่นอนว่าจำนวนตัวอย่างและ otus นั้นแตกต่างกันในแต่ละไฟล์
อย่างที่คุณเห็น ส่วนหัวของตัวอย่างจะนำหน้าด้วยวันที่เสมอ ในบางไฟล์ จะเป็นวันที่เดียวกันเสมอ
สิ่งที่ฉันต้องการบรรลุตอนนี้มีดังต่อไปนี้:
ถ้าฉันมีชื่อตัวอย่างบางอย่าง เช่น sampleA ฉันต้องการแยกผลลัพธ์สำหรับตัวอย่างนี้จากตารางทั้งหมด (ไฟล์ .tsv) ในไดเร็กทอรี แน่นอนว่าควรแยกไฟล์ sampleA ออกจากไฟล์ที่มีอยู่เท่านั้น
ในตารางแรก จะพบ sampleA ในคอลัมน์ที่สอง และควรเข้าแทนที่ผลลัพธ์ที่มีค่าในแถวด้านล่างมากกว่า 0 ในตารางที่สอง จะพบ sampleA ในคอลัมน์ที่ 4
ตารางสุดท้ายควรมีลักษณะดังนี้:
OTU_id |
20210801_sampleA |
20211111_sampleA |
อนุกรมวิธาน |
โอทูอา |
5 |
3 |
ฮันส์เท่มาก |
โอทูบี |
2 |
0 |
แพทริเซียมีดวงตาสีฟ้า |
otuZ |
1 |
4 |
เฟลิกซ์หายไป |
โอทู |
0 |
56 |
อันนาและเอลซ่า |
SampleA มีข้อมูลสำหรับ otuA,B,Z ในไฟล์แรก ผลลัพธ์เหล่านี้จะถูกนำไปใช้ (เช่น OTU_id, ค่าสำหรับส่วนหัว 20210801_sampleA และ Taxonomy)
อย่างที่คุณเห็น otuF ไม่ได้ถูกแยกออกจากตารางแรก เนื่องจาก sampleA มีค่าเป็น 0 ที่นั่น otuF ยังไม่มีอยู่ในตารางที่ 2 ดังนั้นจึงไม่มีอยู่ในไฟล์เอาต์พุตทั้งหมด
otuA และ otuZ มีค่า > 0 ในตารางที่ 2 ด้วย ดังนั้นค่าเหล่านี้จึงถูกแทนที่
otuB มีค่า 0 สำหรับตัวอย่าง A ในตารางที่ 2 โดยปกติจะไม่แตกค่าออกมา แต่เนื่องจากถูกแยกออกจากตารางที่ 1 จึงมีการเพิ่ม 0 ในตำแหน่งนั้น
otuT มีอยู่เฉพาะในตารางที่ 2 ดังนั้นจึงถูกดึงออกมาที่นั่น (OTU_id, ค่าสำหรับ 20211111_sampleA และ Taxonomy) เนื่องจากไม่พบในตารางที่ 1 จึงเพิ่ม 0 ในตำแหน่งนั้น
ในไฟล์ผลลัพธ์ คอลัมน์แรกควรเป็น OTU_id ด้วย คอลัมน์ 2 ถึง x ควรมีข้อมูลสำหรับ sampleA ซึ่งดึงมาจากไฟล์ในไดเร็กทอรี คอลัมน์สุดท้ายควรมีอนุกรมวิธาน
ฉันหวังว่าคุณจะเข้าใจทุกอย่าง มันรบกวนจิตใจฉันมาระยะหนึ่งแล้วและขาดทักษะในการคิดออก โปรดแจ้งให้เราทราบหากมีอะไรไม่ชัดเจน!
ขอบคุณมากสำหรับความช่วยเหลือของคุณและขออภัยที่รบกวนคุณด้วยสิ่งนี้!
ไชโย
โยม
ตารางรูปแบบข้อความ 1.tsv:
OTU_id 20210801_sampleA 20210801_sampleB 20210801_sampleC อนุกรมวิธาน
otuA 5 1 0 ฮันส์เท่มาก
otuB 2 0 0 Patricia มีดวงตาสีฟ้า
otuF 0 6 2 Rutger คือ Bart จริงๆ
otuZ 1 3 0 Felix หายไป
table2.tsv ที่จัดรูปแบบข้อความ
OTU_id 20211111_sampleT 20211111_sampleG 20211111_sampleA อนุกรมวิธาน
otuA 0 3 3 ฮันส์เท่มาก
otuB 2 1 0 Patricia มีดวงตาสีฟ้า
otuP 1 6 0 โทมัสเยี่ยมมาก
otuT 2 22 56 อันนาและเอลซ่า
otuZ 1 8 4 เฟลิกซ์หลงทาง
output.tsv ที่จัดรูปแบบข้อความ
OTU_id 20210801_sampleA 20211111_sampleA อนุกรมวิธาน
otuA 5 3 ฮันส์เท่มาก
otuB 2 0 Patricia มีดวงตาสีฟ้า
otuZ 1 4 Felix หายไป
otuT 0 56 อันนาและเอลซ่า