Деление на все комбинации переменной, сгруппированной по фактору в R - PullRequest
1 голос
/ 25 октября 2019

Мои данные выглядят так:

set <- rep(c(1,2,3,4), each = 15)
h_density <- rep(c(1,3,6), each =5 )
n_density <- rep(c(100,500,1000,5000,10000), times =4 )
counts <- runif(60,900,10000)
data <- data.frame(set,h_density,n_density,counts)
data$set <- as.factor(data$set)
data$n_density <- as.factor(data$n_density)
data$h_density <- as.factor(data$h_density)

В данном наборе есть три уровня h_densities 1,3,6 и пять уровней n_densities 100,500,1000,5000,1000. Для данного набора и данного h_density я хочу разделить все возможные комбинации counts с более низкой плотностью. Итак, я хочу разделить счетчики, связанные с n_densities 100/500, 100/1000, 100/5000, 100/10000, 500/1000, 500/5000, 500/10000, 1000/5000, 1000/10000, 5000/10000. Для вывода я хочу напечатать набор, h_density, коэффициент печати n_densities, счетчик отношения n_densities

Например, результат для первых нескольких строк должен выглядеть следующим образом:

 set h_density n_density_ratio count_ratio
  1   1        100/500         <value>          
  1   1        100/1000        <value>    
  1   1        100/5000        <value>    
  1   1        100/10000       <value>      
  1   1        500/1000        <value>      
  1   1        500/5000        <value>     
 ...

Как мне добиться этого в R?

1 Ответ

2 голосов
/ 25 октября 2019

Если ваши данные не слишком велики, хорошо и просто собрать все комбинации по inner_join() и отфильтровать их по неравенству n_density.

library(dplyr)

data %>% 
  inner_join(data, by = c("set", "h_density"), suffix = c(".l", ".r")) %>% 
  filter(as.numeric(n_density.l) < as.numeric(n_density.r)) %>% 
  mutate(n_density_ratio = paste0(n_density.l , "/", n_density.r)) 
...