2015-04-06 2 views
1

У меня есть небольшой образец данных, и я пытаюсь изменить значения в двух столбцах на основе значений, которые уже находятся в этих столбцах. Dput из data.frame следующим образом:Как изменить значения на уровне столбца в data.frame в R, используя формулу?

structure(list(Day = c(20L, 20L, 20L, 3L, 3L, 3L, 6L, 6L, 6L, 
6L, 11L, 11L, 11L, 4L, 4L, 4L), DaysDead = c(5L, 45L, 60L, 10L, 
1L, 60L, 3L, 10L, 5L, NA, 1L, 6L, 10L, 20L, 45L, 2L), Month = c(1L, 
1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 1L, 1L, 1L), 
    Year = c(6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
    6L, 7L, 7L, 7L), CorrMonth = c(1, 0, -1, 1, 2, 0, 2, 1, 2, 
    2, 3, 3, 3, 0, -1, 1), CorrYear = c(6L, 6L, 6L, 6L, 6L, 6L, 
    6L, 6L, 6L, 6L, 6L, 6L, 6L, 7L, 7L, 7L)), .Names = c("Day", 
"DaysDead", "Month", "Year", "CorrMonth", "CorrYear"), row.names = c(NA, 
-16L), class = "data.frame") 

В data.frame, у меня есть два столбца (CorrMonth и CorrYear), которые должны быть изменены таким образом, что:

  1. Если значение CorrMonth 0 или -1, значение CorrYear становится CorrYear-1, в противном случае оно сохраняет свое значение.

  2. Если значение равно 0 CorrMonth, CorrMonth становится 12, и, если значение CorrMonth равно -1, то становится 11.

я должен изменить столбец CorrYear сначала, чтобы получить правильные значения, затем измените CorrMonth.

Я попытался номер 1 с использованием двух различных утверждений:

>Data$CorrYear<-ifelse(-1 >= (Data$CorrMonth) & (Data$CorrMonth) >=0, Data$CorrYear-1, Data$CorrYear) 

>Data$CorrYear<-ifelse(-1 == (Data$CorrMonth) & (Data$CorrMonth) == 0, Data$CorrYear-1, Data$CorrYear) 

Ни попытка производства нужный мне результат.

> Data$CorrYear 
[1] 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 

Я не могу понять, что происходит. Я не получаю никаких ошибок или предупреждений от R.

+0

Ваш Первое условие для 'Data $ CorrMonth' -' <=-1' and '> = 0'. Второе условие также невозможно (одновременно быть 1 и 0). – bergant

ответ

0

Я бы пропустить ifelse и просто сделать это, как несколько отдельных строк кода:

Data$CorrYear <- Data$CorrYear - (Data$CorrMonth %in% c(-1, 0)) 
Data$CorrMonth[Data$CorrMonth == -1] <- 11 
Data$CorrMonth[Data$CorrMonth == 0] <- 12 

Результат:

Data 
# Day DaysDead Month Year CorrMonth CorrYear 
# 1 20  5  1 6   1  6 
# 2 20  45  1 6  12  5 
# 3 20  60  1 6  11  5 
# 4 3  10  2 6   1  6 
# 5 3  1  2 6   2  6 
# 6 3  60  2 6  12  5 
# 7 6  3  2 6   2  6 
# 8 6  10  2 6   1  6 
# 9 6  5  2 6   2  6 
# 10 6  NA  2 6   2  6 
# 11 11  1  3 6   3  6 
# 12 11  6  3 6   3  6 
# 13 11  10  3 6   3  6 
# 14 4  20  1 7  12  6 
# 15 4  45  1 7  11  6 
# 16 4  2  1 7   1  7 
Смежные вопросы