【问题标题】:Pairwise count data from long format长格式的成对计数数据
【发布时间】:2020-03-18 13:24:48
【问题描述】:

示例数据
我有以下数据:

df <- data.frame(
  id = c('X1','X1','X1','X1','X2','X2','X2','X2'),
  pos = c(1,2,3,4,1,2,3,4),
  group = c(100,200,100,300,100,200,100,200)
)

因此看起来像:

  id pos group
1 X1   1   100
2 X1   2   200
3 X1   3   100
4 X1   4   300
5 X2   1   100
6 X2   2   200
7 X2   3   100
8 X2   4   200

我想达到的目标
我想使用geom_segment() 绘制这些数据,其中pos 将在x 轴上,group 在y 轴上。然后对于这些段中的每一个,我想计算它们在数据集中出现的频率(基于id 列)。对示例数据集执行此操作时,结果将是:

pos1 pos2 group1 group2 id.count
1    2    100    200    2  
2    3    200    100    2  
3    4    100    300    1  
3    4    100    200    1  

我不知道如何开始,虽然我熟悉 dplyr 的 group_by,但我不知道如何构建最初的四列。

【问题讨论】:

    标签: r count transform


    【解决方案1】:

    如果您的数据集中的顺序与您的示例中的一样,您可以试试这个:

     library(dplyr)
    
     df %>% group_by(id) %>% 
            transmute(pos1 = pos, pos2 = lead(pos),
            group1 = group, group2 = lead(group)) %>%
            na.omit() %>% ungroup()%>%
            count(pos1, pos2, group1, group2, name = "id.count")
    # A tibble: 4 x 5
    #   pos1  pos2 group1 group2 id.count
    #  <dbl> <dbl>  <dbl>  <dbl>    <int>
    #     1     2    100    200        2
    #     2     3    200    100        2
    #     3     4    100    200        1
    #     3     4    100    300        1
    

    【讨论】:

      【解决方案2】:

      我尝试了以下可行的方法,但想知道是否有更优雅的解决方案:

      # Simple stats
      vals <- unique(df$pos)
      min.val = min(vals)
      max.val = max(vals)
      
      # Combination
      comb.df <- data.frame(
        pos1 = min.val:(max.val - 1),
        pos2 = (min.val + 1): max.val
      )
      
      # Combine
      comb.df <- comb.df %>% 
        left_join(df %>% select(pos1 = pos, group1 = group, id )) %>%
        left_join(df %>% select(pos2 = pos, group2 = group, id ))
      
      # Count
      comb.df <- comb.df %>% 
        group_by(pos1, pos2, group1, group2) %>%
        summarise(n.ids = n_distinct(id))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-22
        • 2021-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-13
        相关资源
        最近更新 更多