【发布时间】:2019-02-18 15:27:55
【问题描述】:
我有一个包含多个数据框的列表,每个数据框都包含一串日期,对于每个日期,+1 表示增加或 -1 表示减少。
这是一个例子
security1 <- data.frame(
date = seq(from =as.Date('2019-01-01'), to = as.Date('2019-01-10'), by = 'day'),
direction = c(1, 1, 1, -1, -1, 1, 1, 1, 1, -1))
security2 <- data.frame(
date = seq(from =as.Date('2019-01-01'), to = as.Date('2019-01-10'), by = 'day'),
direction = c(1, -1, 1, -1, -1, 1, 1,- 1, 1, -1))
clcn <- list(Sec1 = security1, Sec2 = security2)
对于每个数据框,我都在尝试查找最近的更改字符串的长度,以及上次该数字大于此值的时间。如果前一天的走势是相反的,那么当前的连续走势可能只是 1 天。
我已经为此搜索了几天的答案,并在 Compute counting variable in dataframe 处使用序列和 rle 找到了以下单个数据帧
sequence(rle(as.character(data$list))$lengths)
但我正在努力将其输入 lapply 或 map 以使其遍历列表。
我不介意确切的输出,但理想情况下它包括: 数据框名称、当前连续记录、更长的上一个连续记录以及连续记录结束的日期。 但在最基本的情况下,只需将序列号作为新列添加到数据框上就会有很大帮助,我可以(尝试)从那里获取它。
【问题讨论】:
-
试试
lapply(clcn, function(x) sequence(rle(x$direction)$lengths))