मैंने पहले से ही एक समान प्रश्न यहां बनाया है, हालांकि अब कार्य आउटपुट सुझाव के रूप में प्रत्येक कॉलम से दो प्रविष्टियां चुनना है

enter image description here

नमूना डेटाफ़्रेम

df <- structure(list(A = c("A1", "A2", "A3", "A4",NA), B = c("B1", "B2", 
"B3", "B4",NA), C = c("C1", "C2", "C3", "C4", "C5"), D = c("D1", 
"D2",NA,NA,NA)), row.names = c(NA, -5L), class = c("tbl_df", 
"tbl", "data.frame"))
2
Vaibhav Singh 14 सितंबर 2021, 08:31

2 जवाब

सबसे बढ़िया उत्तर

हम pivot_longer के साथ 'लॉन्ग' फॉर्मेट में फिर से आकार दे सकते हैं, 'नाम' के आधार पर समूहबद्ध करने के बाद पंक्ति अनुक्रम के आधार पर एक फ्लैग कॉलम बना सकते हैं, फिर 'फ्लैग' और 'नाम' कॉलम पर arrange करें। , और उन स्तंभों को हटा दें जिनकी आवश्यकता नहीं है

library(dplyr)
library(tidyr)
df %>% 
  pivot_longer(cols = everything(), values_to = 'Output', 
        values_drop_na = TRUE)  %>% 
  group_by(name) %>% 
  mutate(flag = row_number() > 2) %>% 
  ungroup %>% 
  arrange(flag, name) %>% 
  select(-name, -flag)

आउटपुट

# A tibble: 15 x 1
   Output
   <chr> 
 1 A1    
 2 A2    
 3 B1    
 4 B2    
 5 C1    
 6 C2    
 7 D1    
 8 D2    
 9 A3    
10 A4    
11 B3    
12 B4    
13 C3    
14 C4    
15 C5    

या group_split का भी उपयोग कर सकते हैं

library(purrr)
df %>%
    group_split(rn = row_number() > 2, .keep = FALSE) %>%
    map(~ .x %>%
         unlist %>% 
         na.omit) %>% 
    unlist %>% 
    tibble(output = .)

दूसरे मामले के लिए, हमें 'ध्वज' निर्माण में एक शर्त की आवश्यकता है

df %>% 
  pivot_longer(cols = everything(), values_to = 'Output', 
        values_drop_na = TRUE) %>% 
  group_by(name) %>% 
  mutate(flag = case_when(name == 'D' ~ row_number() > 1, 
        TRUE ~ row_number() > 2)) %>% 
  ungroup %>% 
  arrange(flag, name) %>% 
  select(-name, -flag)

आउटपुट

# A tibble: 15 x 1
   Output
   <chr> 
 1 A1    
 2 A2    
 3 B1    
 4 B2    
 5 C1    
 6 C2    
 7 D1    
 8 A3    
 9 A4    
10 B3    
11 B4    
12 C3    
13 C4    
14 C5    
15 D2    
1
akrun 14 सितंबर 2021, 08:56

यह काम कर सकता है

df %>%
  mutate(E = is.na(.)%>% rowSums()) %>%
  melt(id.vars = "E")  %>%
  arrange(E) %>%
  na.omit %>% 
  select(value)

   value
1     A1
2     A2
3     B1
4     B2
5     C1
6     C2
7     D1
8     D2
9     A3
10    A4
11    B3
12    B4
13    C3
14    C4
19    C5

संपादित करें

dummy %>%
  mutate(E = is.na(.)%>% rowSums()) %>%
  melt(id.vars = "E")  %>%
  na.omit %>%
  arrange(E) %>%
  mutate(FF = max(E)) %>%
  group_by(variable) %>%
  mutate( E = ifelse(variable == "D" & !(value == first(value)), FF - 0.5, E)) %>%
  arrange(E) %>% select(value)

   variable value
   <fct>    <chr>
 1 A        A1   
 2 A        A2   
 3 B        B1   
 4 B        B2   
 5 C        C1   
 6 C        C2   
 7 D        D1   
 8 A        A3   
 9 A        A4   
10 B        B3   
11 B        B4   
12 C        C3   
13 C        C4   
14 D        D2   
15 C        C5
1
Park 14 सितंबर 2021, 08:56