在 R 中,使用 rle(运行长度编码)的结果,包括命名的行和列标题
Posted
技术标签:
【中文标题】在 R 中,使用 rle(运行长度编码)的结果,包括命名的行和列标题【英文标题】:In R, using results of rle (Run Length Encoding) including named row and column headers 【发布时间】:2016-05-26 03:43:12 【问题描述】:我有一个大型矩阵,其中包含公司作为行名、月份作为列名以及每个元素的数据。测试数据如下:
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
progress 对象是应用于矩阵每一行的 rle 函数的输出。结果是一个包含 2 个元素的列表,它们都属于“rle”类。我想:
-
了解如何输出(在 R 中)Company1 的 4x3(逐列)矩阵,如下所示:
因此我很难理解如何处理progression
提供的输出
-
将
progression
导出到excel 以供进一步分析(最好采用上面(1)中的格式(包括列和行标题(在列表输出中它们被称为:attr(*,"names")))。
非常感谢您的帮助!
【问题讨论】:
感谢 TLM 的帮助。 【参考方案1】:这不是特别优雅,但确实可以:
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"))
这是你想要的吗?
【讨论】:
文森特,我应该叫你 Mon homme 代替 Bonhomme。优秀的答案。实际上,我应该更具体地回答我的问题,因为我还想要一个完整的 excel 输出(我有 2000 多家公司),所以创建 2000 个 csv 文件是不切实际的。所以这是我调整后的代码,用于将所有内容放入 1 个文件中:for (i in seq_along(progression)) write.table(format_rle(progression[[i]], names(progression)[i]), file="append.csv",append=T,sep=",",col.names=F)
。那是给其他人的;我敢肯定,如果我表达正确,您也会提供它。再次感谢以上是关于在 R 中,使用 rle(运行长度编码)的结果,包括命名的行和列标题的主要内容,如果未能解决你的问题,请参考以下文章