Как отсортировать записи в строке тиббла в dplyr? - PullRequest
1 голос
/ 20 февраля 2020

В качестве примера:

     V1    V2    V3     X
1     1     5     4    "asa"
2     5     2     3    "sdsf"

должно стать

     V1    V2    V3     X
1     1     4     5    "asa"
2     2     3     5    "sdsf"

Поиск коротких и быстрых решений. Команды for l oop и base R для фрейма данных с ~ 150000 строк требуют много времени.

Ответы [ 2 ]

1 голос
/ 20 февраля 2020
d <- data.frame(
  a=c(1,3),
  b=c(5,2),
  c=c(9,1),
  d=c("as","dasd")
)

d

  a b c    d
1 1 5 9   as
2 3 2 1 dasd

as.data.frame(t(d)) %>% mutate_all(sort) %>% t() %>% as.data.frame()

   V1 V2 V3   V4
V1  1  5  9   as
V2  1  2  3 dasd

Конечно, имена столбцов исходного фрейма данных теряют смысл.

0 голосов
/ 20 февраля 2020

Вы можете повернуть его, расположить строки по размеру, а затем снова повернуть.

library(dplyr)
library(tidyr)

df %>%
  mutate(row_id = row_number()) %>%
  pivot_longer(V1:V3) %>%
  arrange(row_id, value) %>%
  group_by(row_id) %>%
  mutate(name = paste0("V", row_number())) %>%
  ungroup() %>%
  pivot_wider(id_cols = X:row_id, names_from = name, values_from = value) %>%
  select(-row_id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...