ID行到列

时间:2018-03-19 13:42:03

标签: r dataframe merge multiple-columns rows

我想我的问题应该很容易解决。

所以我得到了这个df:

df1
ID STATUS.x STATUS.y
1  A        N
2  B        A
3  N        N
4  B        A
4  B        B
5  N        B

我想要生成的是将相同的ID组合在一起,而不是多行,而是多列:

df2
ID STATUS.x STATUS.y STATUS.x1 STATUS.y1
1  A        N
2  B        A
3  N        N
4  B        A        B         B
5  N        B

这可能吗?

非常感谢,Andrea

1 个答案:

答案 0 :(得分:1)

使用tidyverse的解决方案。 select(ID, ends_with("1"), ends_with("2"))是可选的。目的只是订购列。

library(tidyverse)

df2 <- df1 %>%
  gather(STATUS, Value, -ID) %>%
  group_by(ID, STATUS) %>%
  mutate(Row = row_number()) %>%
  unite("STATUS_new", STATUS, Row, sep = ".") %>%
  spread(STATUS_new, Value) %>%
  select(ID, ends_with("1"), ends_with("2")) %>%
  ungroup()
df2
# # A tibble: 5 x 5
#      ID STATUS.x.1 STATUS.y.1 STATUS.x.2 STATUS.y.2
#   <int> <chr>      <chr>      <chr>      <chr>     
# 1     1 A          N          NA         NA        
# 2     2 B          A          NA         NA        
# 3     3 N          N          NA         NA        
# 4     4 B          A          B          B         
# 5     5 N          B          NA         NA     

数据

df1 <- read.table(text = "ID STATUS.x STATUS.y
1  A        N
                  2  B        A
                  3  N        N
                  4  B        A
                  4  B        B
                  5  N        B",
                  header = TRUE, stringsAsFactors = FALSE)