मैंने पहले से ही एक समान प्रश्न यहां बनाया है, हालांकि अब कार्य आउटपुट सुझाव के रूप में प्रत्येक कॉलम से दो प्रविष्टियां चुनना है
नमूना डेटाफ़्रेम
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