将两条 rle 行应用到数据集中时发生“无效的 'rle' 结构”

问题描述

当我尝试使用 rle 替换数据框中的某些值时遇到了一些问题。我的数据集记录了鸡的感染状态。前几列是描述性的,例如 ID、隔离器和处理。我遇到的主要问题是从第 4 列到第 14 列,它记录了每个采样时间鸡(0,1)的状态。我在下面的代码中简化了数据集

df1 <- data.frame("ID" = c(1,2,3,4,5,6,7,8,9,10),"Isolator" = c(1,1,1),"tre"= c("a","a","a"),"T1" = c(0,0),"T2" = c(0,"T3"= c(0,"T4"= c(1,"T5"= c(1,"T6"= c(1,1))

我需要根据它的出现调整状态。那是 如果出现一个 1 后跟 0 -> 用 0 替换 1 如果发生了 1 个以上,然后是 0 -> 将后面的 0 替换为 1

ie.  input
v = c(NA,1)
output
v = c(NA,1)

我使用 rle() 来定位这些位置

run.length = rle(v)
run.length$values[which(run.length$values == 1 & run.length$lengths == 1) ] = 0 
run.length$values[which(run.length$values == 1 & run.length$lengths > 1) +1] = 1
inverse.rle(run.length)

##The first rle worked
run.length$values[which(run.length$values == 1 & run.length$lengths == 1) ] = 0 
=> v = c(NA,1)

但是第二个 rle() 是

run.length$values[which(run.length$values == 1 & run.length$lengths>1) +1] = 1 

不起作用并显示以下警告消息

警告信息: 在 run.length$values == 1 & run.length$lengths > 1 中: 较长的物体长度不是较短物体长度的倍数

我也尝试将它应用到我的数据帧中,但发生了类似的问题。

A<-apply(rawBnew[6:15],function(x) {
  run.length = rle(x)
  run.length$values[which(run.length$values == 1 & run.length$lengths == 1)] = 0
  run.length$values[which(run.length$values == 1 & run.length$lengths > 1) +1] = 1
  inverse.rle(run.length)
})

当我包含第二个 rle 时仍然发生错误 警告信息是 inverse.rle(run.length) 错误:'rle' 结构无效

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)