从长格式开始的对数计数数据

问题描述 投票:0回答:1

示例数据我有以下数据:

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-xis上,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个回答
1
投票

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

# 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))
© www.soinside.com 2019 - 2024. All rights reserved.