WedX - журнал о программировании и компьютерных науках

Использование цикла/чего-либо еще для записи строки интервалов (вектор)

Я сделал это трудным путем и хотел бы знать, как бы вы сделали это с помощью цикла/более быстрого метода. Я создаю метки для уровней, чтобы использовать их в выкройке, работая с возрастными группами.

levels(age_group) <- ("<10","10-19","20-29","30-39","40-49","50-59","60-69","70-79","80-89","90-99","100-109",
             "110-119","120-129","130+")

У кого-нибудь есть хорошие идеи о том, как это сделать? Меньшие «‹10» и «130+» можно добавить вручную, но я уверен, что есть более быстрый способ сделать все остальное.

Спасибо


Ответы:


1

Вероятно, было бы лучше использовать уровни, сгенерированные cut, потому что ваши текущие интервалы не определяют, какой конец включен.

s <- c(-Inf,seq(10,130,10),Inf)
levels(cut(s,s))
#  [1] "(-Inf,10]"  "(10,20]"    "(20,30]"    "(30,40]"    "(40,50]"   
#  [6] "(50,60]"    "(60,70]"    "(70,80]"    "(80,90]"    "(90,100]"  
# [11] "(100,110]"  "(110,120]"  "(120,130]"  "(130, Inf]"

Если вы должны использовать свои текущие интервалы, вы можете использовать эту простую функцию:

strInterval <- function(start, end, by) {
  s <- seq(start, end, by)
  i <- paste(head(s,-1), s[-1]-1, sep="-")
  c(paste0("<",start), i, paste0(end,"+"))
}
strInterval(10,130,10)
#  [1] "<10"     "10-19"   "20-29"   "30-39"   "40-49"   "50-59"   "60-69"  
#  [8] "70-79"   "80-89"   "90-99"   "100-109" "110-119" "120-129" "130+" 
14.08.2013
  • Да, ярлыки превратились бы в публикацию. (Я не говорил об этом в начале), поэтому я искал что-то близкое к завершению. Это здорово, но может ли быть ничья? 15.08.2013

  • 2
    cts <- seq(10,130, by=10)
    paste(c("<=", cts), c(cts-1, "+") , sep="-")
    # [1] "<=-9"    "10-19"   "20-29"   "30-39"   "40-49"   "50-59"   "60-69"  
    # [8] "70-79"   "80-89"   "90-99"   "100-109" "110-119" "120-129" "130-+"  
    

    Вы сказали, что можете отрегулировать концы по мере необходимости, верно?

    14.08.2013
  • Я тоже собираюсь использовать это. Это, безусловно, самый эффективный и краткий ответ. 15.08.2013

  • 3

    Просто подключите max/min и запустите остальную часть кода.

    min <- 10
    max <- 130
    
    seq1 <- seq(min, max, by = 10)
    seq2 <- seq(min-1, max-1, by = 10)
    
    age_group <- c(paste("<", min, sep = ""), rep("foo", length(seq1)-1))
    
      for (i in 1:(length(seq1)-1)) {
    
        grp1 <- seq1[i]
        grp2 <- seq2[i+1]
    
        group <- paste(grp1, "-", grp2, sep = "")
    
        age_group[i+1] <- group
    
      }
    
    age_group <- c(age_group, paste(max, "+", sep = ""))
    
    age_group
    
    14.08.2013
  • Человек, это действительно элегантный способ сделать это и требует наименьшего ручного редактирования. Мне нравится тот факт, что мне нужно только изменить min и max, чтобы запустить другую строку. 15.08.2013
  • Я также очень хотел увидеть цикл, потому что я буду использовать его и с векторами символов. 15.08.2013

  • 4

    Мое решение опубликовано ранее но с некоторыми изменениями здесь (это применимо, только если вы используете функцию cut и используете этот интервал):

    mydata<-round(seq(1,20,length.out=5))
    mydata<-as.data.frame(mydata)
    names(mydata)<-"V" #name the column as V
    mydata$V1<-cut(mydata$V,5) #break the data into five intervals and name that as col V1
    mydata$lower<-with(mydata,round(as.numeric( sub("\\((.+),.*", "\\1", V1)))) #extract lower value
    mydata$upper<-with(mydata,round(as.numeric( sub("[^,]*,([^]]*)\\]", "\\1",V1)))) # extract upper value
    myfinaldata<-mydata[,c("lower","upper")] #create data frame of lower and upper values
    myfinaldata$interval<-with(myfinaldata,paste(lower,upper,sep="-"))
    
     myfinaldata
      lower upper interval
    1     1     5      1-5
    2     5     9      5-9
    3     9    12     9-12
    4    12    16    12-16
    5    16    20    16-20
    
    14.08.2013
    Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]