【问题标题】:pivot_wider dynamically by number of ocurrences [duplicate]pivot_wider 动态地按出现次数[重复]
【发布时间】:2020-10-02 06:42:12
【问题描述】:

对不起,如果标题不是很具有描述性。我有这样的数据:

我正在尝试做的是在Product 上进行旋转并计算他们拥有的每种Client 的出现次数,以便动态添加“最常见的客户”、“第二常见的客户”等列.

如果我们按ProductClient 分组并计数,我们会在每个Product 中看到每个Client 的出现次数:

从这里我的目标是达到这样的目标:

所以 A 的“1 号客户端”是 C1,B 是 C2,等等。同样,这应该是动态的,因为我事先不知道有多少 “nX_Client”列将是。

打破关系(对于Product C,有 2 个Client,每个出现 1 次)可以随机进行,按字母顺序或您想要的任何方式。这对我的用例并不重要。

reprex

ID <- c(1,2,3,4,5,6,7,8,9,10)
Size <- c(1,2,1,2,1,2,1,2,1,2)
Product <- c("A", "A", "A", "A", "A", "B", "B", "B", "C", "C")
Client <- c("C0", "C0", "C1", "C1", "C1", "C2", "C2", "C1", "C0", "C1")
df <- data.frame( ID, Size, Product, Client )

df <- df %>% 
  group_by(Product, Client) %>% 
  summarise(count = n())

最好的问候。

【问题讨论】:

    标签: r dplyr pivot tidyr


    【解决方案1】:

    您可以为每个ProductClient 提供count 的行数并对它们进行排序。根据频率为每个Product 创建一个列名,并将数据转换为宽格式。

    library(dplyr)
    
    df %>%
      count(Product, Client, sort = TRUE) %>%
      group_by(Product) %>%
      mutate(n = sprintf('n%d_client', row_number())) %>%
      tidyr::pivot_wider(names_from = n, values_from = Client)
    
    # Product n1_client n2_client
    #  <chr>   <chr>     <chr>    
    #1 A       C1        C0       
    #2 B       C2        C1       
    #3 C       C0        C1      
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-28
      • 2015-12-11
      • 1970-01-01
      • 2012-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多