如何在dplyr中对TIBLE行中的条目进行排序?

如何在dplyr中对TIBLE行中的条目进行排序?,r,dplyr,purrr,R,Dplyr,Purrr,例如: 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" 寻找简短快速的解决方案。对于大约150000行的数据帧,使用for循环和base R命令需要相当长的时间。d%mutate\u all(s

例如:

     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"
寻找简短快速的解决方案。对于大约150000行的数据帧,使用for循环和base R命令需要相当长的时间。

d%mutate\u all(sort)%%>%t()%%>%as.data.frame()
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
V1 V2 V3 V4 V1 1 5 9 as v2123dasd

当然,初始数据帧的列名将变得毫无意义。

您可以对其进行透视,按大小排列行,然后再次将其透视回来

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)

这回答了你的问题吗?i、 e.如果只想对数字进行排序,请先将数字位转换为矩阵。矩阵计算在R中通常非常快