我有一个包含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安排功能,但没有成功。有人可以帮助解决此问题吗?
非常感谢。
答案 0 :(得分:1)
我们可以通过编程方式执行此操作。创建行向量('v1')的序列,然后将其转换为具有2列('m1')的matrix
,split
将data.frame转换为matrix
,并使用分组变量用gl
创建,因此我们每3列拆分一次,以创建list
的{{1}},用data.frame
遍历list
,转置({{ 1}}),并将lapply
转换为t
(matrix
),vector
c
元素并将其用作子集的索引。进行转置,以便当我们进行连接(unlist
)时,它可以利用默认行为,即按列顺序获取值作为向量。
list
或者使用c
,我们通过创建row_number列,然后按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
行
gl