1

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

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

进程对象是应用于矩阵每一行的 rle 函数的输出。结果是一个包含 2 个元素的列表,它们都属于“rle”类。我想:

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

在此处输入图像描述

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

  1. 导出progression到 excel 以供进一步分析(最好采用上述 (1) 中的格式(包括列和行标题(在列表输出中它们被称为:attr(*,"names")))。

非常感谢您的帮助!

4

1 回答 1

0

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

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"))

这是你想要的吗?

于 2016-05-26T08:38:30.897 回答