2015-04-06 76 views
1

我有一個小樣本的數據,我試圖根據已經在這些列中的值來更改兩列中的值。所述data.frame的dput如下:如何使用公式在R中的data.frame中的列級更改值?

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. 如果CorrMonth值爲0,CorrMonth變爲12,如果CorrMonth值爲-1,則變爲11

我必須先更改CorrYear列,以獲得正確的價值觀,然後改變CorrMonth。

>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) 

也不嘗試產生我所需要的結果:

我使用兩種不同的語句數試圖1。

> 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