R-在摘要(dplyr管道)内的列中显示唯一值,而不是对它们进行计数

时间:2018-09-07 09:25:39

标签: r dplyr reshape

我希望通过一种方式重塑数据,以使一列中与另一列相关的区域值显示在新创建的列中

df
     A    B  
1  <NA> <NA>
2    a    b
3    a    d
4    b    c

类似于:

> df %>% 
+   group_by(A) %>% 
+   summarise(n_distinct(B))
# A tibble: 3 x 2
     A     `n_distinct(B)`
   <chr>           <int>
  1 a                   2
  2 b                   1
  3 NA                  1

但是,除了计算出现次数之外,还可以在新列中显示实际值吗?

类似以下内容:

df
     A    B
1   <NA> <NA>
2    a    b  **d**
4    b    c

我尝试传播,但是它不起作用,出现以下错误:

  

错误:行的标识符重复

我的两列都是因素,但如果需要可以重新分类。

谢谢!

2 个答案:

答案 0 :(得分:0)

library(dplyr)
library(tidyr)
df %>% group_by(A) %>% summarise(B=paste0(unique(B), collapse = ',')) %>% 
       separate(B,into = paste0('B',1:2))

# A tibble: 3 x 3
A     B1    B2   
<chr> <chr> <chr>
1 a     b     d    
2 b     c     NA   
3 NA    NA    NA   
Warning message:
Expected 2 pieces. Missing pieces filled with `NA` in 2 rows [2, 3]. 

答案 1 :(得分:0)

这里是创建序列列后使用spread的选项

library(tidyverse)
df %>%
   group_by(A)  %>% 
   mutate(n1 = paste0("B", row_number())) %>%
   ungroup %>% 
   spread(n1, B)
# A tibble: 3 x 3
#  A     B1    B2   
#  <fct> <fct> <fct>
#1 a     b     d    
#2 b     c     <NA> 
#3 <NA>  <NA>  <NA> 

数据

df <- data.frame(A = c(NA, 'a', 'a', 'b'), B = c(NA, 'b', 'd', 'c'))