условное совпадение и подсчет с помощью dplyr - PullRequest
0 голосов
/ 04 декабря 2018

Представьте, что мои друзья рекомендуют мне несколько автомобилей в зависимости от моего бюджета.Я хочу определить для каждого бюджета, сколько раз все друзья рекомендуют одну и ту же марку, а также сколько раз все друзья рекомендуют одну и ту же марку и модель.

budget <- c(rep(c("broke", "modest", "dreaming"), each = 3), rep("broke", 3))
friend <- (rep(c("mark", "mary", "monelle"), 4))
make <- c(rep("ford", 3), rep("honda", 3), "porche", rep("bmw",2), rep("bicycle", 3))
model <- c(rep("fiesta", 3), rep("civic", 2), "tacoma", "911", "i3", "Z4", rep("used", 3))

df <- data.frame(budget, friend, make, model)

     budget  friend    make  model
1     broke    mark    ford fiesta
2     broke    mary    ford fiesta
3     broke monelle    ford fiesta
4    modest    mark   honda  civic
5    modest    mary   honda  civic
6    modest monelle   honda tacoma
7  dreaming    mark  porche    911
8  dreaming    mary     bmw     i3
9  dreaming monelle     bmw     Z4
10    broke    mark bicycle   used
11    broke    mary bicycle   used
12    broke monelle bicycle   used

Желаемый результат -

budget matchMake matchMake+Model
broke      2     2 
modest     1     0
dreaming   0     0

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Альтернатива с использованием plyr split-apply-combin (разбиение по переменной "budget") и использование count для проверки, сколько раз указывается одна и та же марка или модель /

ddply(df, .(budget), function(df_budget) 
      c(matchMake = sum(count(df_budget, "make")$freq > 1), 
        matchMakeModel = sum(count(df_budget, c("make", "model"))$freq > 1)))
0 голосов
/ 04 декабря 2018

Вот один способ с dplyr.

df %>% 
  spread(friend, model) %>% 
  mutate(
    matchMake = apply(.[3:5], 1, function(x) !anyNA(x)),
    matchMake_Model = apply(.[3:5], 1, function(x) all(x[1] == x))
  ) %>% 
  group_by(budget) %>% 
  summarise(
    matchMake = sum(matchMake, na.rm = T),
    matchMake_Model = sum(matchMake_Model, na.rm = T)
  ) 

# A tibble: 3 x 3
  budget   matchMake matchMake_Model
  <fct>        <int>           <int>
1 broke            2               2
2 dreaming         0               0
3 modest           1               0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...