我的数据如下:
set <- c(1,1,1,2,2,3,3,3,3,3,4,4)
density <- c(1,3,3,1,3,1,1,1,3,3,1,3)
counts <- c(100,2,4,76,33,12,44,13,54,36,65,1)
data <- data.frame(set,density,counts)
data$set <- as.factor(data$set)
data$density <- as.factor(data$density)
在给定的集合中,有两个级别的密度“ 1”或“ 3”。对于给定的集合,我想划分密度“ 1”和密度“ 3”的计数的所有可能组合。然后,我想打印与密度“ 1”,比率和设置相关的原始密度
例如,前几行的结果应类似于:
set counts ratio
1 100 50 #100/2
1 100 25 #100/4
2 76 2.3 #76/33
3 12 0.22 #12/54
3 12 0.33 #12/36
3 44 0.8148 #44/54
...
我以为我可以通过dplyr来实现。.但是对于dplyr来说似乎有点复杂。
答案 0 :(得分:3)
评论似乎可以帮助您达到目标。这是一个dplyr
解决方案。使用left_join
,每个密度1都与同一集合中的所有密度3匹配,从而提供符合您的规格的输出。
# Edited below to use dplyr syntax; my base syntax had a typo
library(dplyr)
data_combined <- data %>% filter(density == 1) %>%
# Match each 1 w/ each 3 in the set
left_join(data %>% filter(density == 3), by = "set") %>%
mutate(ratio = counts.x / counts.y) %>%
select(set, counts.x, counts.y, ratio)
data_combined
# set counts.x counts.y ratio
#1 1 100 2 50.0000000
#2 1 100 4 25.0000000
#3 2 76 33 2.3030303
#4 3 12 54 0.2222222
#5 3 12 36 0.3333333
#6 3 44 54 0.8148148
#7 3 44 36 1.2222222
#8 3 13 54 0.2407407
#9 3 13 36 0.3611111
#10 4 65 1 65.0000000