【发布时间】:2019-01-22 10:58:29
【问题描述】:
在下面的示例中,我的目标是显示在 5 连续实例中,df 转换为 df_new 的连续数字低于 threshold 的 -1.2 的年份。然后我想从列 df_new$year 返回相应的唯一值作为结果。我链接rle() 函数结果的问题是长度与df_new$year 长度不对应,因此我无法正确索引它。 rle() 函数的问题在于它不返回零,因此它只返回比 k 中的 threshold 低至少 1 个值的运行。我怎样才能改进这段代码来实现我所需要的?有没有办法强制 rle() 在k 中包含零,或者我应该采用另一种方法吗?
# Example reproducible df:
set.seed(125)
df <- data.frame(V1=rnorm(10,-1.5,.5),
V2=rnorm(10,-1.5,.5),
V3=rnorm(10,-1.5,.5),
V4=rnorm(10,-1.5,.5),
V5=rnorm(10,-1.5,.5),
V6=rnorm(10,-1.5,.5),
V7=rnorm(10,-1.5,.5),
V8=rnorm(10,-1.5,.5),
V9=rnorm(10,-1.5,.5),
V10=rnorm(10,-1.5,.5))
library(data.table)
df_t <- t(df)
df_long <- melt(df_t)
df_long$year <- rep(1976:1985, each=nrow(df))
df_new <- data.frame(value=df_long$value,year=df_long$year)
# Threshold values:
threshold = -1.2
consecutiveentries = 5
number <- consecutiveentries-1
# Start of the problem:
k <- rle(df_new$value < threshold)
years <- unique(df_new$year[k$lengths > number])
当前结果:
> years
[1] 1976 1978 1979 1980 1982 1984 1985
我希望它是什么:
> years
[1] 1976 1980 1983 1985
【问题讨论】:
-
问题只是关于代码的最后两行(或多或少)?如果是这样,您能否修改您的问题,发布
df_new$value和df_new$year并根据输入显示预期输出? -
@markus 我修改了问题以使其更清晰,但保留可重现的 df 原样
-
关于
rle输出和df_new$year的长度 - 这有帮助吗:stackoverflow.com/questions/54072409/…
标签: r dataframe run-length-encoding