我的数据框架具有以下结构
x Total PartA PartB
0 13 6 7
1 19 8 11
...
现在我想将数据帧转换为
x Val Colname
0 13 "Total"
0 6 "PartA"
0 7 "PartB"
1 19 "Total"
1 8 "PartA"
1 11 "PartB"
因此,我希望将每一行转换成一行" Total"," PartA"和" PartB"列。我一直在寻找一个优雅的dplyr解决方案,但我缺乏术语使得很难找到任何解决方案。
答案 0 :(得分:3)
使用tidyr
,我们可以使用gather
。此外,我们可以按特定顺序使用dplyr
到arrange
x
和select
列,这会使数据看起来就像您提供的示例:< / p>
library(dplyr)
library(tidyr)
df %>%
gather(key = "ColName", value = "Val", -x) %>%
arrange(x) %>%
select(x, Val, ColName)
x Val ColName 1 0 13 Total 2 0 6 PartA 3 0 7 PartB 4 1 19 Total 5 1 8 PartA 6 1 11 PartB
数据:
Lines = "x Total PartA PartB
0 13 6 7
1 19 8 11"
df <- read.table(text = Lines, header = TRUE, stringsAsFactor = FALSE)