首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >铸造有序数据

铸造有序数据
EN

Stack Overflow用户
提问于 2014-07-08 17:20:11
回答 1查看 57关注 0票数 3

我设法获得了以下格式的数据:

代码语言:javascript
复制
run    type1
data1  12
data2  13
run    type2
data1  14
data2  15
...

我要:

代码语言:javascript
复制
run    data1 data2
type1     12    13
type2     14    15
...

我试过投[投],但没有用。有什么建议吗?

样本数据:

代码语言:javascript
复制
data.frame(matrix(c("run","type1","data1",12,"data2",13,"run","type2","data1",14,"data3",15), ncol=2, byrow=T))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-08 19:05:50

这是我的建议:

代码语言:javascript
复制
cast.runs <- function(d) {
  isrun <- d[[1]]=="run"
  whichrun <- which(isrun)
  lens <- diff(c(whichrun, nrow(d)+1))
  runlabels <- inverse.rle(list(lengths=lens, values=d[[2]][whichrun]))
  return(cbind(run=runlabels, d)[!isrun,])
}

此函数将产生合适的长格式,然后您可以根据您认为合适的情况重铸它:

代码语言:javascript
复制
  runlabels    X1 X2
2     type1 data1 12
3     type1 data2 13
5     type2 data1 14
6     type2 data3 15

毫不奇怪,我从识别run行开始。我计算了每一次运行有多少行,包括标题行。该代码是受this answer启发的。接下来,我多次重复每个运行标签,最后删除标题行。

转换此输出的一种可能方法是使用来自dcast包的reshape2函数:

代码语言:javascript
复制
> dcast(cast.runs(d), run ~ X1)
Using X2 as value column: use value.var to override.
    run data1 data2 data3
1 type1    12    13  <NA>
2 type2    14  <NA>    15
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24637921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档