根据各列将行拆分为多行

时间:2018-04-14 19:51:45

标签: r dplyr

我的数据框架具有以下结构

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解决方案,但我缺乏术语使得很难找到任何解决方案。

1 个答案:

答案 0 :(得分:3)

使用tidyr,我们可以使用gather。此外,我们可以按特定顺序使用dplyrarrange xselect列,这会使数据看起来就像您提供的示例:< / 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)
相关问题