在 R 中,使用 rle(运行 长度编码)的结果,包括命名行和列 headers

In R, using results of rle (Run Length Encoding) including named row and column headers

我有一个大型矩阵,其中包含行名公司、列名月份和每个元素的数据。测试数据如下:

testmatrix<-matrix(c(1,0,0,0,10,5,5,5,5,5,2,2,0,0,0,0,0,1,1,1),nrow=4,ncol=5,byrow=TRUE)
colnames(testmatrix)<-c("Jan","Feb","Mar","Apr","May")
rownames(testmatrix)<-c("Company1","Company2","Company3","Company4")
progression<-apply(testmatrix,1,rle)
progression

级数 object 是应用于矩阵每一行的 rle 函数的输出。结果是一个包含 2 个元素的列表,它们都是 class 'rle'。我愿意:

  1. 了解如何输出(在 R 中)Company1 的 4x3(逐列)矩阵,如下所示:

因此我很难理解如何处理 progression

提供的输出
  1. progression导出到excel以供进一步分析(最好采用上面(1)中的格式(包括列和行headers(在列表输出中它们被引用如:attr(*,"names")).

非常感谢您的帮助!

这不是特别优雅,但可以完成工作:

format_rle <- function(rle, rn){
  l <- list(rle$lengths,
    names(rle$lengths),
    rle$values,
    names(rle$values))
  m <- as.matrix(do.call(rbind, l))
  colnames(m) <- NULL
  rownames(m) <- rep(rn, nrow(m))
  m
}

尝试 format_rle(progression[[1]], "foo") 了解思路:

[,1]  [,2]  [,3] 
foo "1"   "3"   "1"  
foo "Feb" "May" ""   
foo "1"   "0"   "10" 
foo "Jan" "Apr" "May"

然后我们将此函数应用于所有进行中的元素,并将结果保存到根据进行中的名称命名的单个 csv 文件中。你的工作目录中应该有 a bunch of .csv 个文件(getwd() 来打印它)。

for (i in seq_along(progression))
  write.csv(format_rle(progression[[i]], names(progression)[i]),
            file=paste0(names(progression[i]), ".csv"))

这是你想要的吗?