重新排列数据行

伊娃·巴尔高娃(Eva Balgova)

我有一个包含2个变量(列)和108行的数据框,我需要重新排列两列的行顺序,如下所示:1、2、3、55、56、57、4、5、6、58, 59,60,7,8,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安排功能,但没有成功。有人可以帮助解决此问题吗?

非常感谢。

阿克伦

我们可以通过编程方式做到这一点。创建行向量('v1')的序列,然后将其转换为matrix具有2列('m1')的a,split将data.frame转换为matrix使用创建了分组变量的分组,gl以便我们每3列进行拆分以创建listdata.frames ,循环在listlapply,转置(t),并转换matrixvectorc),unlist所述list元件和使用,作为指数为子集。进行转置,以便当我们进行串联(c)时,它可以利用默认行为,即按列顺序获取值作为向量。

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, .)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章