首页 > 解决方案 > 重新排列数据行

问题描述

我有一个包含 2 个变量(列)和 108 行的数据框,我需要重新排列两列的行顺序,如下所示:1、2、3、55、56、57、4、5、6、58、 59, 60, 7, 8, 9, 61, 62, 63, 10, 11, 12, 64, 65, 66, 13, 14, 15, 67, 68, 69, 16, 17, 18, 70, 71, 72, 19, 20, 21, 73, 74, 75, 22, 23, 24, 76, 77, 78, 25, 26, 27, 79, 80, 81, 28, 29, 30, 82, 83, 84, 31, 32, 33, 85, 86, 87, 34, 35, 36, 88, 89, 90, 37, 38, 39, 91, 92, 93, 40, 41, 42, 94, 95, 96, 43, 44, 45, 97, 98, 99, 46, 47, 48, 100, 101, 102, 49, 50, 51, 103, 104, 105, 52, 53, 54, 106, 107, 108...为此我正在尝试使用 dplyr 排列功能但没有成功。任何人都可以帮助解决这个问题吗?

非常感谢。

标签: rsortingdataframe

解决方案


我们可以通过编程方式做到这一点。创建行向量序列('v1'),然后将其转换为matrix具有 2 列('m1')的 a,使用创建的分组变量split转换 data.frame ,以便我们在每 3 列处拆分以创建s ,循环使用,转置( ),并将元素转换为(),并将其用作子集的索引。转置完成后,当我们进行连接 ( ) 时,它可以利用默认行为,即按列顺序将值作为向量获取。matrixgllistdata.framelistlapplytmatrixvectorcunlistlistc

v1 <- seq_len(nrow(df1))
m1 <- matrix(v1, nrow = 2, byrow = TRUE)
ind <- unlist(lapply(split.default(as.data.frame(m1), 
         as.integer(gl(ncol(m1), 3, ncol(m1)))), function(x) c(t(x)))) 
df1[ind,]

或者dplyr,我们采用相同的方法,通过创建 row_number 列,然后按创建的列分组gl,我们arrange将行

library(dplyr)
df1 %>%
   transmute(v1 = row_number())  %>%
   group_by(grp = as.integer(gl(n(), n()/2, n()))) %>%
   group_by(grp1 = gl(n(), 3, n())) %>% 
   ungroup %>%
   arrange(grp1) %>% 
   pull(v1) %>% 
   arrange(df1, .)

推荐阅读