首页 > 解决方案 > R - 在汇总(dplyr 管道)中在一列中显示唯一值而不是对它们进行计数

问题描述

我想重塑我的数据,使与另一列相关的一列中的地区值显示在新创建的列中

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

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

错误:行标识符重复

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

谢谢!

标签: rdplyrreshape

解决方案


这是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'))

推荐阅读