r - R对连续重复的奇数列表求和并删除除第一个列表之外的所有列表
问题描述
我被问题困住了。如何加入连续重复的奇数列表并删除除第一个列表之外的所有列表。我已经学会了如何对连续重复的行求和并删除除第一行之外的所有行(链接:R 对连续重复的奇数行求和并删除除第一行之外的所有行)。但是这个项目,我想加入连续重复的奇数列表,但不是所有的连续重复列表。
data.table 或 dplyr 会很好
例如:
ia<-c(1,1,2,2,1,1,1,1)
time <- list(c(23,43),
c(24,54,32),
c(23,43,232),
c(24,54,32),
c(23,43,2),
c(24,54,32),
c(24,54,32),
c(24,54,32)
)
至
res_time <- list(c(23,43,24,54,32), # 1+1
c(23,43,232), # 2
c(24,54,32), # 2
c(23,43,2,24,54,32,24,54,32,24,54,32) # 1+1+1+1
)
谢谢!
解决方案
这个“几乎”给出了仅使用基数 R 的预期输出。我们使用创建分组序列diff
。为了交替选择组,我们递归地创建一个交替TRUE
/FALSE
值序列,并基于这个值,我们unlist
将列表值组合在mapply
.
pat <- cumsum(c(0, diff(ia)) != 0)
mapply(function(x, y) if(y) unlist(time[x]) else time[x],
split(seq_along(time), pat), rep(c(TRUE, FALSE), length.out = length(unique(pat))))
#$`0`
#[1] 23 43 24 54 32
#$`1`
#$`1`[[1]]
#[1] 23 43 232
#$`1`[[2]]
#[1] 24 54 32
#$`2`
# [1] 23 43 2 24 54 32 24 54 32 24 54 32
推荐阅读
- node.js - 需要解析SQS消息
- python - 如何在 Python 中成功进行单元测试?
- java - 井字游戏逻辑
- python - 队列中没有项目,但应该有 python 线程
- reactjs - React Navigation 上的自定义选项卡样式
- laravel - laravel 新手。我收到一个错误,我不知道出了什么问题
- slack - 将 slack 字段添加到 Prometheus 警报管理器 slack 通知
- php - 如何在 PHP7 中将对象转换为数组?
- php - 为什么我的 IF 语句无法定义会员级别?
- qt - 使用 vtkImagePlaneWidget 和 vtkPOpenFOAMReader 的问题