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

Как создать новую переменную в data.frame на основе условия?

Предположим, у нас есть фрейм данных

x   y
1   1
2   4 
4   5 

как вы можете добавить новую переменную в фрейм данных, чтобы, если x меньше или равно 1, он возвращал "хорошо", если x между 3 и 5, он возвращал "плохо", иначе возвращал "справедливо"

x   y  w
1   1  "good"
2   2   "fair"
5   5   "bad"

Применял метод, показанный ocram., Однако здесь он не работает.

d1 <- c("e", "c", "a")
d2 <- c("e", "a", "b")

w <- ifelse(d1 == "e" & (d2=="e"), 1, ifelse((d1 == "a") & (d2 =="b"), 2, ifelse(d1 == "e"),3,99))

Любые идеи? Спасибо

19.04.2011

  • Ваш последний код не работает, так как вы перепутали круглые скобки; он должен быть всегда ifelse(cond,ifTrue,ifFalse), никогда ifelse(cond) ifTrue, ifFalse. 20.04.2011

Ответы:


1

Одна очевидная и простая возможность - использовать «условия if-else». В этом примере

x <- c(1, 2, 4)
y <- c(1, 4, 5)
w <- ifelse(x <= 1, "good", ifelse((x >= 3) & (x <= 5), "bad", "fair"))
data.frame(x, y, w)

** Для дополнительного вопроса в редактировании ** Это то, что вы ожидаете?

> d1 <- c("e", "c", "a")
> d2 <- c("e", "a", "b")
> 
> w <- ifelse((d1 == "e") & (d2 == "e"), 1, 
+    ifelse((d1=="a") & (d2 == "b"), 2,
+    ifelse((d1 == "e"), 3, 99)))
>     
> data.frame(d1, d2, w)
  d1 d2  w
1  e  e  1
2  c  a 99
3  a  b  2

Если вы не чувствуете себя комфортно с функцией ifelse, вы также можете работать с операторами if и else для таких приложений.

19.04.2011
  • Спасибо за тонну, но подход ограничен всего двумя условиями? см. отредактированный вопрос выше 20.04.2011

  • 2

    Если у вас очень ограниченное количество уровней, вы можете попробовать преобразовать y в коэффициент и изменить его уровни.

    > xy <- data.frame(x = c(1, 2, 4), y = c(1, 4, 5))
    > xy$w <- as.factor(xy$y)
    > levels(xy$w) <- c("good", "fair", "bad")
    > xy
      x y    w
    1 1 1 good
    2 2 4 fair
    3 4 5  bad
    
    26.08.2012
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге 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 , и использованием..

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