将某些列转换为数据框中的新行并将它们放置在行之间

时间:2021-04-26 01:36:38

标签: r dplyr

我有一个数据框 df,如下所示:

Col1 Col2 Col3 Col4 Col5

Cat  JK  3.1   A   B
Dog  JK  4.0   C   D
Bir  JK  4.5   E   F
   

我希望最终的数据框看起来像:

Col1 Col2 Col3   

Cat  JK  3.1
A    NA  NA
B    NA  NA
Dog  JK  4.0
C    NA  NA
D    NA  NA
Bir  JK  4.5
E    NA  NA
F    NA  NA

所以我想把 Col3 之后的所有列的内容放到它们各自行下面的新行中。

重要提示:请注意,Col3 之后的行数是可变的(我将两个数据框连接在一起以创建 df),因此可能需要 for() 循环吗?行数也是可变的,因为它是 Shiny 中的反应表,所以这可能是另一个循环。如果需要,Col3 之后的所有列都可以重命名为任何内容。

dplyr 包的 add_row() 函数似乎可以完成这项工作,还有 .before/.after“选项”,但我不确定我将如何去做。这甚至可能吗?

1 个答案:

答案 0 :(得分:2)

我不知道这是否是您所追求的,但如果有什么应该做的,请告诉我:

library(dplyr)
library(tidyr)

df %>%
  pivot_longer(!c(Col2, Col3)) %>%
  relocate(value) %>%
  select(-name) %>%
  rename(Col1 = value)

# A tibble: 9 x 3
  Col1  Col2   Col3
  <chr> <chr> <dbl>
1 Cat   JK      3.1
2 A     JK      3.1
3 B     JK      3.1
4 Dog   JK      4  
5 C     JK      4  
6 D     JK      4  
7 Bir   JK      4.5
8 E     JK      4.5
9 F     JK      4.5

数据

df <- tribble(
  ~Col1, ~Col2, ~Col3, ~Col4, ~Col5,
  "Cat",  "JK",  3.1,   "A",   "B",
  "Dog",  "JK",  4.0,   "C",   "D",
  "Bir",  "JK",  4.5,   "E",   "F"
)