我的数据帧有点不合适。我有几个值应该是表格格式的一列的一部分,如下所示:
X_1 X_2 X_3 X_4 X_5
Wasser Strand Zangen Beine Schmerz
Wasser Meer rot Steine beißen
Rot Lecker Restaurant Teuer Gourmet
Zellen Leid Schmerzen Chemotherapie Tot
rot Krallen tödlich Schmerzen schlimm
Hummer salz sternzeichen krankheit rot
Wasser Meer Sternzeichen Krankheit Tumor
我想让我的数据框看起来很整洁"因此,我想将几列堆叠成一列,如下所示:
X_1
Wasser
Wasser
Rot
Zellen
rot
Hummer
Wasser
Strand
Meer
Lecker
Leid
Krallen
....
这需要在几个"块"中完成。有没有办法在tidyverse
框架内执行此操作?我试过弄乱gather()
,但我无法让它发挥作用......
为了提供一个小代码片段,可以从中做出一个可重现的例子:
matrix(1:40, ncol = 8)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1 6 11 16 21 26 31 36
[2,] 2 7 12 17 22 27 32 37
[3,] 3 8 13 18 23 28 33 38
[4,] 4 9 14 19 24 29 34 39
[5,] 5 10 15 20 25 30 35 40
我希望得到的结果如下:
[,1] [,2]
[1,] 1 21
[2,] 2 22
[3,] 3 23
[4,] 4 24
[5,] 5 25
[6,] 6 26
[7,] 7 27
[8,] 8 28
[9,] 9 29
[10,] 10 30
[11,] 11 31
[12,] 12 32
[13,] 13 33
[14,] 14 34
[15,] 15 35
[16,] 16 36
[17,] 17 37
[18,] 18 38
[19,] 19 39
[20,] 20 40
答案 0 :(得分:2)
不需要tidyverse。
从前一个矩阵创建一个新矩阵。设置列数,并按列填充(byrow = FALSE)
m <- matrix(1:40, ncol = 8)
matrix(m, ncol = 2, byrow = FALSE)
[,1] [,2]
[1,] 1 21
[2,] 2 22
[3,] 3 23
[4,] 4 24
[5,] 5 25
[6,] 6 26
[7,] 7 27
[8,] 8 28
[9,] 9 29
[10,] 10 30
[11,] 11 31
[12,] 12 32
[13,] 13 33
[14,] 14 34
[15,] 15 35
[16,] 16 36
[17,] 17 37
[18,] 18 38
[19,] 19 39
[20,] 20 40
答案 1 :(得分:2)
[编辑]我还没有看到@Wimpel的回答。因此,使用data.frame
和更复杂的模式,我会看到以下解决方案:
> df <- as.data.frame(matrix(1:40, ncol = 8))
> df
V1 V2 V3 V4 V5 V6 V7 V8
1 1 6 11 16 21 26 31 36
2 2 7 12 17 22 27 32 37
3 3 8 13 18 23 28 33 38
4 4 9 14 19 24 29 34 39
5 5 10 15 20 25 30 35 40
> pattern = list(c(1,3), c(2, 5), c(4, 7), c(6, 8))
> data.frame(sapply(pattern, function(x) unlist(df[x])))
X1 X2 X3 X4
V11 1 6 16 26
V12 2 7 17 27
V13 3 8 18 28
V14 4 9 19 29
V15 5 10 20 30
V31 11 21 31 36
V32 12 22 32 37
V33 13 23 33 38
V34 14 24 34 39
V35 15 25 35 40