Существует ли функция создания возрастной группы от возраста [дубликат]

В моем случае я получал эту ошибку, потому что я представлял контроллер выбора изображения без предварительной проверки, разрешил ли пользователь доступ к изображениям. В другом месте моего кода пользователь предоставил разрешение, поэтому я думаю, что все, что мне нужно было сделать, это импортировать фотографии. Однако, поскольку они «не могут» предоставить разрешение на тот момент в приложении, добавив это непосредственно перед тем, как я представила контроллер выбора изображения, решила проблему для меня (импортируйте также фотографии).

// request photos permission if permission has not been granted
    if PHPhotoLibrary.authorizationStatus() != PHAuthorizationStatus.authorized {
        PHPhotoLibrary.requestAuthorization({ (status: PHAuthorizationStatus) in

        })
    }

Если этот ответ кажется излишним мои извинения, но мне пришлось собраться вместе с несколькими разными ответами, чтобы заставить мое решение работать. Возможно, это поможет кому-то другому использовать Swift 4.

10
задан Rich Scriven 16 September 2015 в 22:15
поделиться

4 ответа

Я хотел бы использовать findInterval() здесь:

Сначала создайте некоторые данные образца

set.seed(1)
ages <- floor(runif(20, min = 20, max = 50))
ages
# [1] 27 31 37 47 26 46 48 39 38 21 26 25 40 31 43 34 41 49 31 43

Используйте findInterval(), чтобы классифицировать ваш вектор «age».

findInterval(ages, c(20, 30, 40))
# [1] 1 2 2 3 1 3 3 2 2 1 1 1 3 2 3 2 3 3 2 3

В качестве альтернативы, как рекомендовано в комментариях, cut() также полезен здесь:

cut(ages, breaks=c(20, 30, 40, 50), right = FALSE)
cut(ages, breaks=c(20, 30, 40, 50), right = FALSE, labels = FALSE)
26
ответ дан Hsif 21 August 2018 в 11:34
поделиться
  • 1
    Сэр, будет ли эта команда по-прежнему давать такую ​​же группировку? – leian 19 October 2012 в 18:42
  • 2
    @leian, вы пробовали код? Это должно . Однако, задавая вопросы здесь в теге R в SO, лучше всего включить минимальный воспроизводимый пример , если вы хотите получить более целенаправленную помощь. – A5C1D2H2I1M1N2O1R2T1 19 October 2012 в 18:51
  • 3
    ах .. это сработало. и это простой код. – leian 19 October 2012 в 19:01
  • 4
    но какое будет имя переменной результата findInterval ()? – leian 19 October 2012 в 19:02
  • 5
    Что бы вы ни хотели! Из вашего примера, я бы предположил, что вы сделаете что-то вроде data$agegrp <- findInterval(data$age, c(20, 30, 40)). – A5C1D2H2I1M1N2O1R2T1 19 October 2012 в 19:08

Этот ответ предоставляет два способа решения проблемы с помощью пакета data.table, что значительно улучшит скорость процесса. Это важно, если вы работаете с большими наборами данных.

1s Подход: адаптация предыдущего ответа, но теперь использующая data.table +, включая labels:

library(data.table)

agebreaks <- c(0,1,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,500)
agelabels <- c("0-1","1-4","5-9","10-14","15-19","20-24","25-29","30-34",
               "35-39","40-44","45-49","50-54","55-59","60-64","65-69",
               "70-74","75-79","80-84","85+")

setDT(data)[ , agegroups := cut(age, 
                                breaks = agebreaks, 
                                right = FALSE, 
                                labels = agelabels)]

Второй подход: это более многословный метод, но он также делает более понятным, что именно попадает в каждую возрастную группу:

setDT(data)[age <1, agegroup := "0-1"]
data[age >0 & age <5, agegroup := "1-4"]
data[age >4 & age <10, agegroup := "5-9"]
data[age >9 & age <15, agegroup := "10-14"]
data[age >14 & age <20, agegroup := "15-19"]
data[age >19 & age <25, agegroup := "20-24"]
data[age >24 & age <30, agegroup := "25-29"]
data[age >29 & age <35, agegroup := "30-34"]
data[age >34 & age <40, agegroup := "35-39"]
data[age >39 & age <45, agegroup := "40-44"]
data[age >44 & age <50, agegroup := "45-49"]
data[age >49 & age <55, agegroup := "50-54"]
data[age >54 & age <60, agegroup := "55-59"]
data[age >59 & age <65, agegroup := "60-64"]
data[age >64 & age <70, agegroup := "65-69"]
data[age >69 & age <75, agegroup := "70-74"]
data[age >74 & age <80, agegroup := "75-79"]
data[age >79 & age <85, agegroup := "80-84"]
data[age >84, agegroup := "85+"]

Хотя оба подхода должны дать тот же результат, я предпочитаю 1-й по двум причинам. (a) Короче писать и (2) упорядоченные возрастные группы правильны, что имеет решающее значение, когда дело доходит до визуализации данных.

8
ответ дан ErrantBard 21 August 2018 в 11:34
поделиться
  • 1
    Второй подход, похоже, не работает с R 3.2. Он дает ошибку, не может найти функцию & quot;: = & quot; – Akshay Hazari 15 March 2016 в 10:54
  • 2
    Меня устраивает. Убедитесь, что вы загрузите библиотеку data.table library(data.table); и что вы работаете с data.table (а не с фреймом данных) setDT(your_dataframe) # convert your DF into a data.table – rafa.pereira 15 March 2016 в 22:13

Предположим, что ваши возрасты были сохранены в столбце dataframe с меткой age. Ваш фрейм данных - df, и вам нужен новый столбец age_grouping, содержащий «ведро», в которое входят ваши возрасты.

В этом примере предположим, что ваш возраст варьировался от 0 до> 100 и вы хотели группировать их каждые 10 лет. Следующий код выполнит это, сохранив эти интервалы в новом столбце age grouping:

df$age_grouping <- cut(df$age, c(0:100, 10))
0
ответ дан Marquistador 21 August 2018 в 11:34
поделиться
myData$age_grp <- myData$age
myData$age_grp <- ifelse((myData$age>=10 & myData$age<=18) , 'minnor',myData$age_grp)
myData$age_grp <- ifelse((myData$age>18 & myData$age<=21) , 'junior',myData$age_grp)
myData$age_grp <- ifelse((myData$age>21 & myData$age<=25) , 'major_1',myData$age_grp)
myData$age_grp <- ifelse((myData$age>25 & myData$age<=30) , 'major_2',myData$age_grp)
myData$age_grp <- ifelse((myData$age>30 & myData$age<=40) , 'major_3',myData$age_grp)
myData$age_grp <- ifelse((myData$age>40 & myData$age<=55) , 'major_4',myData$age_grp)
myData$age_grp <- ifelse((myData$age>55) , 'minnor',myData$age_grp)
myData$age_grp<-as.factor(myData$age_grp)
summary(myData$age_grp)
library(dplyr)
myData <- select(myData, -(age) )
0
ответ дан user2458922 21 August 2018 в 11:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: