我有一个数据框 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“选项”,但我不确定我将如何去做。这甚至可能吗?
答案 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"
)