यहां एक संभावित तरीका है। आप जीन और सीडीएस के साथ पंक्तियों का चयन करते हैं। फिर, आप प्रारंभ और अंत तक अपना डेटा समूहित करते हैं। 1 या 3+ पंक्तियों के साथ START/END के समूह हो सकते हैं। तो आप यह सुनिश्चित करना चाहते हैं कि आप दो पंक्तियों के साथ START/END समूह चुनें। इसके अतिरिक्त, आप यह सुनिश्चित करना चाहते हैं कि आपके पास जीन और सीडीएस (length(unique(Tipo)) == 2
) दोनों हों। अंत में, आप Accesion1 और accesion 2.
में गैर एनए तत्व ले
filter(df, Tipo %in% c("gene", "CDS")) %>%
group_by(Start, End) %>%
filter(n() == 2 & length(unique(Tipo)) == 2) %>%
summarise(Accesion1 = Accesion1[!is.na(Accesion1)],
Accesion2 = Accesion2[!is.na(Accesion2)])
यहाँ एक छद्म उदाहरण है। summarize_each
साथ
mydf <- structure(list(Tipo = structure(c(2L, 1L, 2L, 1L, 2L, 2L), .Label = c("CDS",
"gene"), class = "factor"), Start = c(197, 197, 1717, 1717, 2864,
2864), End = c(1558, 1558, 2853, 2853, 3112, 3112), Strand = structure(c(1L,
1L, 1L, 1L, 1L, 1L), .Label = "+", class = "factor"), Accesion1 = structure(c(NA,
1L, NA, 2L, NA, 3L), .Label = c("NP_344554", "NP_344555", "NP_344556"
), class = "factor"), Accesion2 = structure(c(1L, NA, 2L, NA,
3L, NA), .Label = c("SP_0001", "SP_0002", "SP_0003"), class = "factor")), .Names = c("Tipo",
"Start", "End", "Strand", "Accesion1", "Accesion2"), row.names = c(NA,
-6L), class = "data.frame")
Tipo Start End Strand Accesion1 Accesion2
1 gene 197 1558 + <NA> SP_0001
2 CDS 197 1558 + NP_344554 <NA>
3 gene 1717 2853 + <NA> SP_0002
4 CDS 1717 2853 + NP_344555 <NA>
5 gene 2864 3112 + <NA> SP_0003
6 gene 2864 3112 + NP_344556 <NA>
filter(mydf, Tipo %in% c("gene", "CDS")) %>%
group_by(Start, End) %>%
filter(n() == 2 & length(unique(Tipo)) == 2) %>%
summarise(Accesion1 = Accesion1[!is.na(Accesion1)],
Accesion2 = Accesion2[!is.na(Accesion2)])
# Start End Accesion1 Accesion2
#1 197 1558 NP_344554 SP_0001
#2 1717 2853 NP_344555 SP_0002
आप थोड़ा अधिक जानकारी प्रदान करने के लिए, चाहे के बारे में आवश्यकता हो सकती है 'जीन/CDS' नहीं जोड़े में होता है या। यह अस्पष्ट है क्योंकि आपने बताया कि अन्य मूल्य 'टीआरएनए, क्षेत्र, एक्सोन' इत्यादि हैं मान लीजिए, यदि 'df1 $ प्रारंभ करें [6] <- 2 9 64 'उदाहरण डेटासेट – akrun
उदाहरण के लिए अपेक्षित परिणाम क्या होगा, वे जोड़े में आते हैं आपके द्वारा दिया गया समाधान बहुत अच्छा काम करता प्रतीत होता है। चूंकि कुछ अतिरिक्त टिपो मौजूद हैं, कुछ एनए दिखाई देते हैं, लेकिन मैं उन्हें आसानी से पूर्ण.cases से हटा सकता हूं, मैं dplyr के साथ समाधान ढूंढ रहा था, सिर्फ इसलिए कि मैं इसे प्यार करता हूं। लेकिन समाधान (आप मिटा दिया?) अच्छी तरह से काम करता है –
क्या आप यह जांच सकते हैं कि यह 'लाइब्रेरी (डेटा.table); setDT (df1) [, id: = cumsum (tipo ==' gene ')] [, सूची (Accesion1 = na.omit (Accesion1) है, Accesion2 = na.omit (Accesion2)), सूची (आईडी, स्टार्ट, एंड)] ' – akrun