R: Создайте флаг 0 или 1 для всей группы, если одно значение в этой группе ниже определенного порога - PullRequest
0 голосов
/ 17 ноября 2018

У меня есть такой набор данных:

group  services
1         75
1         105
1         110
2         110
2         110
2         110

Я хочу создать флаг, где, если любое из значений групповой службы падает ниже 100, оно помечается 0. Если они все выше 100, этопомечен 1. Вывод будет:

group    services      flag
1         75            0
1         105           0
1         110           0
2         110           1
2         110           1
2         110           1

Набор данных состоит из тысяч групп, поэтому я не уверен, как это сделать.Я попытался использовать dplyr как

 dataset%>%
       group_by_(group)%>%
       mutate(flag:= services>=100)

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

Ответы [ 3 ]

0 голосов
/ 17 ноября 2018

A base R подход

transform(df1, flag = ave(services, group, FUN = function(x) all(x >= 100)))
#  group services flag
#1     1       75    0
#2     1      105    0
#3     1      110    0
#4     2      110    1
#5     2      110    1
#6     2      110    1
0 голосов
/ 18 ноября 2018

Вот вариант с data.table

library(data.table)
setDT(df1)[, flag := +(all(services >= 100)), group]
df1
#   group services flag
#1:     1       75    0
#2:     1      105    0
#3:     1      110    0
#4:     2      110    1
#5:     2      110    1
#6:     2      110    1
0 голосов
/ 17 ноября 2018

Вам нужно включить условие any в ваш тест, чтобы вернуть TRUE (или 1), если какое-либо значение в вашей группе ниже 100.

library(dplyr)
data %>% 
group_by(group) %>% 
mutate(flag = as.numeric(!any(services<100)))

#  A tibble: 6 x 3
# Groups:   group [2]
  group services  flag
  <int>    <int> <dbl>
1     1       75     0
2     1      105     0
3     1      110     0
4     2      110     1
5     2      110     1
6     2      110     1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...