【发布时间】:2021-03-16 12:33:39
【问题描述】:
我想知道是否有人可以帮助我将较长的行分成几行较短的行,然后将它们拆开?
- 在此示例中,我有 12 列长的行,我希望将其分成更多行 à 4 列(请参阅 stack_df)。
- 总体计划是,然后按行方式将所有列 unite() 并将 mutate() 转换为一列(9 行 x 1 列,请参阅 merge_df)。
- 之后,我希望将它们解压成一个大小为 3 行 3 列的数据框(参见 simple_df。)
第 1 部分(1/2):
> df <- matrix(c("A", "B", "C"),nrow=3,ncol=12,byrow=F)
> df
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
[1,] "A" "A" "A" "A" "A" "A" "A" "A" "A" "A" "A" "A"
[2,] "B" "B" "B" "B" "B" "B" "B" "B" "B" "B" "B" "B"
[3,] "C" "C" "C" "C" "C" "C" "C" "C" "C" "C" "C" "C"
第 1 部分(2/2):
> stack_df <- matrix(c(rep("A",3), rep("B",3), rep("C",3)), nrow = 9, ncol = 4)
> stack_df
[,1] [,2] [,3] [,4]
[1,] "A" "A" "A" "A"
[2,] "A" "A" "A" "A"
[3,] "A" "A" "A" "A"
[4,] "B" "B" "B" "B"
[5,] "B" "B" "B" "B"
[6,] "B" "B" "B" "B"
[7,] "C" "C" "C" "C"
[8,] "C" "C" "C" "C"
[9,] "C" "C" "C" "C"
第二部分:unite()、mutate()、case_when()
> merge_df <- stack_df %>%
+ as.data.frame(.) %>%
+ unite(stack_df, 1:4, na.rm = T) %>%
+ print()
stack_df
1 A_A_A_A
2 A_A_A_A
3 A_A_A_A
4 B_B_B_B
5 B_B_B_B
6 B_B_B_B
7 C_C_C_C
8 C_C_C_C
9 C_C_C_C
这里有一个mutate(),case_when()过程。
> mutate_df <- cbind(sample(letters,9)) %>%
+ print()
[,1]
[1,] "w"
[2,] "q"
[3,] "t"
[4,] "p"
[5,] "r"
[6,] "k"
[7,] "i"
[8,] "o"
[9,] "d"
第 3 部分:取消堆叠行(到 3 行,3 列)。 (期望的输出)
> simple_df <- matrix(mutate_df, nrow = 3, ncol=3, byrow = T)
> simple_df
[,1] [,2] [,3]
[1,] "w" "q" "t"
[2,] "p" "r" "k"
[3,] "i" "o" "d"
【问题讨论】:
-
你知道
tidyr::separate_rows()