根据时间范围/行长度和时间段分类创建新变量

时间:2017-12-11 15:40:20

标签: r

我是论坛的新手和R.我正在努力解决这个问题。 我有以下数据框架。

Date        |   ONIstatus  
01/10/1993  |Average  
01/11/1993  |Average  
01/12/1993  |Average    
01/02/1993  |Average    
01/03/1993  |High    
01/04/1993  |High  
01/05/1993  |High  
01/06/1993  |High  
01/10/1995  |Low  
01/11/1995  |Low  
01/12/1995  |Low  

我需要创建一个新变量,根据事件的长度对某些事件进行分类。所以,如果我连续3个月处于“高”状态,那么我在名为“el ninio event”的新变量中创建类,连续3个低位事件被归类为“la ninia”。其他任何东西都被称为“正常”,例如只有一个'高'月。

每次ONI状态发生变化时,都会标记一个事件的开始 我会使用循环实现这一点,还是可以使用lubridate,Dyply(mutate)和一些ifelse语句做一些事情?

由于

1 个答案:

答案 0 :(得分:0)

请尝试以下操作。

r <- rle(data$ONIstatus)
r$values[r$lengths < 3] <- 'normal'
r$values[r$values == "High" & r$lengths >= 3] <- 'el ninio event'
r$values[r$values == "Low" & r$lengths >= 3] <- 'la ninia'
data$New <- inverse.rle(r)
data

诀窍是使用函数rle来获取列ONIstatus中的运行长度值。然后设置r$values的值并反转操作 我不知道该怎么称呼新列,所以我称之为New,如果你愿意,可以改变它。