Score:1

แยกข้อมูลเฉพาะจากตารางต่างๆ แล้วรวมเข้าด้วยกัน

ธง in

ฉันต้องการแยกแถวเฉพาะจากคอลัมน์เฉพาะจากตารางต่างๆ ตามส่วนหัวของคอลัมน์ อย่างไรก็ตาม ความรู้ของฉันดูเหมือนจะจำกัดเกินไปที่จะแก้ปัญหาด้วยตัวเอง (ทั้งใน 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 อันนาและเอลซ่า
muru avatar
us flag
โปรดโพสต์ตัวอย่างอินพุตและเอาต์พุตที่คาดไว้เป็นข้อความรูปแบบโค้ด โปรด: https://askubuntu.com/editing-help#code ซึ่งทำให้ทดสอบได้ง่ายขึ้น
in flag
สวัสดี muru ฉันเพิ่มสิ่งเหล่านี้ในตอนท้ายของโพสต์แล้ว ฉันหวังว่านี่เป็นวิธีที่คุณหมายถึง? โปรดแจ้งให้เราทราบหากฉันทำผิด
muru avatar
us flag
ขอบคุณ มันดีกว่ามาก!

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา