我有一个包含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列进行拆分以创建list
的data.frame
s ,循环在list
同lapply
,转置(t
),并转换matrix
到vector
(c
),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] 删除。
我来说两句