我是论坛的新手和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语句做一些事情?
由于
答案 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
,如果你愿意,可以改变它。