df <- structure(list(C1 = c("ABC", "XYZ", "DEF"),
C2 = c("ZLO", "BCD", "PQR"),
C3 = c("E1", "E2", "E3")),
class = "data.frame", row.names = c(NA, -3L))
Решение использует символы dplyr
и tidyr
, чтобы привести данные в длинную форму, сгруппировать их по строкам и отсортировать по строкам, а затем вернуть обратно в широкую форму:
library(dplyr)
library(tidyr)
Изменить:
Отредактированный код, так что C3
остается без изменений
df %>%
mutate(ID = row_number()) %>%
pivot_longer(cols=-c(ID, C3)) %>%
group_by(ID) %>%
arrange(value) %>%
mutate(name = paste0("C", row_number())) %>%
pivot_wider(names_from = name,
values_from = value) %>%
select(C1, C2, C3)
# Groups: ID [3]
ID C1 C2 C3
<int> <chr> <chr> <chr>
1 1 ABC ZLO E1
2 2 BCD XYZ E2
3 3 DEF PQR E3