【问题标题】:Reshape start-end time intervals to smaller intervals in R将开始时间间隔重塑为 R 中的较小间隔
【发布时间】:2015-06-16 16:56:40
【问题描述】:

这是按时间间隔划分的持续时间数据。

id <- c("A", "B", "B", "B", "C", "C", "D", "E", "F", "F", "F", "F")
start <- c(368, 200, 230, 788, 230, 521, 272, 306, 0, 162, 337, 479)
end <- c(373.98, 229.98, 233.98, 842.98, 239.98, 639.98, 285.98,
       306.98,  95.98, 162.98, 339.98, 539.98)
value <- c(20, 24, 24, 24, 19, 19, 100, 1, 8, 8, 8, 8)
dt <- data.frame(id, start, end, value)
head(dt)
  id start    end value
1  A   368 373.98    20
2  B   200 229.98    24
3  B   230 233.98    24
4  B   788 842.98    24
5  C   230 239.98    19
6  C   521 639.98    19

我想将以下数据转换为 1001 列内的表格格式(第一个 = id,列从 1 到 1000)。分割间隔。

将持续时间数据转换为“检查点”格式。为每个 id 创建行,其中持续时间序列与列名称一致应该是 $id 的 $value。对于其他情况 = 0。

d <- data.frame(matrix(ncol = 1001, nrow = 1))
colnames(d) <- c("id", 1:1000)
dim(d)
[1]    1 1001

我在 1001 列中创建了日期框架。我知道如何为行创建序列,但我无法将此序列实现到表中。

r 中的什么运算符对我有帮助?任何想法起点在哪里?非常感谢您的帮助。

我希望这个例子足够清楚,否则请告诉我,我会尽力进一步澄清。

预期的输出是 1001 列内的数据框,其中第一个的名称 = id,从第二个到最后一个 = 1 到 1000 的数字。对于每个唯一的 id,当列的名称 = 时间间隔 (从 $start 到 $end 的数字)

【问题讨论】:

  • 不清楚预期的输出。
  • 对于第一行,即。对于 ID 'A',我猜 20 的值会从 368th 列填充到 373rd 或 374th 列?对于 ID,“B”,您有多个范围应相应填写
  • @moseno 如果你看一下这个例子,有一个start =0。 0这里是哪一栏?

标签: r apply reshape seq


【解决方案1】:

“开始”中的一个值是“0”。因此,我更改为“1”,创建了一个 1000 列和 6 行的矩阵(“m1”)(“id”列中的unique 元素的length)。使用Map,为每个“开始”、“结束”值创建一个序列,输出为list(“lst”)。我们rbind 'lst' ('d2'),使用基于'd2' 值的row/column 索引,我们将'm1' 中的NA 值替换为基于'nrow' 复制的'value' 列每个“lst”元素。

dt$start[9] <- 1
m1 <- matrix(ncol=1000, nrow=length(unique(dt$id)),
   dimnames=list(unique(dt$id), paste0('id', 1:1000)))
lst <- Map(function(x,y,z) data.frame(id=z, Col=seq(x,y)) ,
               dt$start, trunc(dt$end), dt$id)
d2 <- do.call(rbind, lst)
m1[cbind(as.numeric(d2$id), d2[,2])] <- rep(dt$value,sapply(lst, nrow))

【讨论】:

  • 非常感谢,它有效!为了逃避 NA 我使用了: m1[is.na(m1)]
  • 如何填写 0 个值?从 0 到 999。
  • @moseno 对不起,我不明白你的问题。您能否使用相关信息更新您的帖子,或者作为新问题发布(哪个更合适)?
猜你喜欢
  • 2014-11-22
  • 1970-01-01
  • 2021-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-09
相关资源
最近更新 更多