Arhn - архитектура программирования

R Как подмножество фрейма данных с циклом for по столбцу

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

Ниже мои данные и код:

>max_value_found

   Group  Mileage    HiLo 
1  car        808    Hi     
2  train   162993    Lo 
3  car      19386    Hi     
4  walk       231    Lo 



>levels(max_value_found$group)

[1] "car"       "train"     "bike"      "walk"

>for(i in levels(max_value_found$group))
+{  x=paste(i,"_max_value",sep="")
+   x
+   x <-subset(max_value_found, max_value_found$group==i)
+}

>car_max_value

Error: object 'car_max_value' not found

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

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

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

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

Спасибо за вашу помощь

08.02.2015

  • Наверное, вы могли бы начать с split(max_value_found, max_value_found$group) 08.02.2015
  • Хорошо, я не знал о команде разделения, так что спасибо вам за это. Я также ищу, чтобы он предоставил уровень как часть результирующего фрейма данных. 08.02.2015
  • Что ты имеешь в виду? У вас есть уровни в столбце group, а также в имени фрейма данных 08.02.2015
  • Но я не думаю, что они действительно создаются. Когда я выполняю команду ls () после завершения цикла for, новые фреймы данных не отображаются. И когда я выполняю ls () внутри цикла, они там тоже не появляются. Так что это странный случай, когда цикл for не дает сбоев, но я не получаю результатов, которые ищу. Спасибо 08.02.2015
  • Какой шлейф? Вам не нужно помещать split в цикл. Кроме того, конечно, они не присутствуют в глобальной среде. split возвращает список, который вы можете где-нибудь сохранить. Настоящий вопрос: нужно ли вам действительно создавать множество фреймов данных и спамить в вашей глобальной среде, или вы можете сохранить их в этом списке? 08.02.2015
  • Поэтому я бы хотел, чтобы они были в моей глобальной среде. Опять же, я не думаю, что они создаются, но если бы они были, я бы сделал что-то вроде write.csv для каждого из фреймов данных подмножества по мере их создания, а затем прочитал их в глобальную среду? 08.02.2015
  • Нет. Вы можете просто сделать list2env(split(max_value_found, max_value_found$group), .GlobalEnv) (без какого-либо цикла), а затем, например, попробовать car. Хотя обычно это делать не рекомендуется. 08.02.2015
  • Спасибо, попробую. 09.02.2015

Ответы:


1

Как отметил Дэвид в комментариях:

max_value_found <- data.frame(Group = c("car", "train", "car", "walk"),
                              Mileage = c(808, 162993, 19386, 231), 
                              HiLo = c("Hi", "Lo", "Hi", "Lo")) 


> list1 <- split(max_value_found, max_value_found$Group)
> list1 
$car   
Group Mileage HiLo 
1   car     808   Hi 
3   car   19386   Hi

$train   
Group Mileage HiLo 
2 train  162993   Lo

$walk   
Group Mileage HiLo 
4  walk     231   Lo

Изменить: чтобы снова разместить их в глобальной среде, используйте код Дэвида:

> list2env(list1, .GlobalEnv)
<environment: R_GlobalEnv>
> ls()
[1] "car"             "list1"           "max_value_found" "train"          
[5] "walk"           
> str(car)
'data.frame':   2 obs. of  3 variables:
 $ Group  : Factor w/ 3 levels "car","train",..: 1 1
 $ Mileage: num  808 19386
 $ HiLo   : Factor w/ 2 levels "Hi","Lo": 1 1
> str(train)
'data.frame':   1 obs. of  3 variables:
 $ Group  : Factor w/ 3 levels "car","train",..: 2
 $ Mileage: num 162993
 $ HiLo   : Factor w/ 2 levels "Hi","Lo": 2
> car
  Group Mileage HiLo
1   car     808   Hi
3   car   19386   Hi
> train
  Group Mileage HiLo
2 train  162993   Lo

Я не думаю, что это хороший ход. Вам лучше получить доступ к фреймам данных из списка, то есть list1$car или list1[["car"]].

08.02.2015
  • А какой тип списка split(max_value_found, max_value_found$Group) дает? Разве это еще не было названо? 09.02.2015
  • Вы можете оставить split ответ, чтобы на вопрос был дан ответ. 09.02.2015
  • Хорошо, я понял, list1 - это массив фреймов данных. Есть ли способ разбить их на отдельные фреймы данных? Помимо этого, я думаю, что это будет работать нормально. Спасибо 09.02.2015
  • Спасибо, я думаю, мне нужно больше узнать о средах, но это определенно решает мою проблему. 09.02.2015
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..