Функция условия - PullRequest
       2

Функция условия

2 голосов
/ 15 февраля 2012

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

У меня есть столбец с именем «день месяца», и значения могут быть, например, 7, 15 или 27.Я хочу преобразовать эти дни в неделю, которой они соответствуют.

Точно,

  • дней <7 с первой недели, </p>

  • дней> = 7 & <14 с недели2, </p>

  • дней> = 14 и <21 с 3-й недели, а </p>

  • дней> = 21 & <31 с 4-й недели.</p>

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

Пример:

dayofthemonth, sample, week
5, 0.35,  1
14, 0.5, 3
27, 0.74, 4
[...]

Я попробовал функцию «если», но она не работает, когда условие применяется к вектору вместо одного значения.

Ответы [ 3 ]

3 голосов
/ 15 февраля 2012

Допустим, ваш фрейм данных df. Вы можете использовать

df$week <- floor(df$dayofthemonth/7) + 1

После этого и для полноты приведем еще один подход (без ifelse), который удовлетворяет последнему условию:

df$week[ which(df$week) > 4 ] <- 4
1 голос
/ 15 февраля 2012

Если ваш фрейм данных называется d:

d$week = floor(d$dayofthemonth / 7) + 1
0 голосов
/ 16 февраля 2012

Другие показали способ получения желаемых результатов, используя слово, но, более конкретно, для вашего вопроса, поток программы if работает только с одним логическим значением и предназначен для выбора блока кода для запуска.Функция ifelse будет принимать вектор логических значений и 2 других вектора (один для TRUE, другой для FALSE) и чередовать 2 вектора на основе логического вектора, поэтому один вариант, использующий ifelse для вашего вопроса, будет:

d$week <- ifelse( d$dayofthemonth < 7, 1, 
  ifelse( d$dayofthemonth < 14, 2, 
    ifelse( d$dayofthemonth < 21, 3, 4 ) ) )

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...