首页 > 解决方案 > 在 tidyverse 中分离新列中的重复数据

问题描述

我有一个大型数据库,许多数据是重复的,我想为这些数据生成两个新列。

这里有一个简要的数据

df <- tribble(~ID, ~Code,
              1, "p",
              1, "p",
              2, "f",
              3, "p",
              2, "p",
              3, "f",
              4, "f",
              4, "p",
              6, "p")

我想得到以下数据:

	Out1	Out2
1	p	p
2	f	p
3	p	f
4	f	p
5	p	NA
我努力在 tidyverse 中单独运行来做到这一点。有什么帮助吗?

标签: rtidyverse

解决方案


一种方法是:

df %>%
 group_by(ID) %>%
 mutate(temp = paste0("Out", seq_along(ID))) %>%
 spread(temp, Code)

     ID Out1  Out2 
  <dbl> <chr> <chr>
1     1 p     p    
2     2 f     p    
3     3 p     f    
4     4 f     p    
5     6 p     <NA> 

如果您还想更改 ID:

df %>%
 group_by(ID) %>%
 mutate(temp = paste0("Out", seq_along(ID))) %>%
 spread(temp, Code) %>%
 ungroup() %>%
 mutate(ID = seq_along(ID))

     ID Out1  Out2 
  <int> <chr> <chr>
1     1 p     p    
2     2 f     p    
3     3 p     f    
4     4 f     p    
5     5 p     <NA> 

推荐阅读