Arrays 为指定时间段内的所有单元格指定单个值,矩阵格式

Arrays 为指定时间段内的所有单元格指定单个值,矩阵格式,arrays,r,matrix,Arrays,R,Matrix,我有下面的示例数据集,其中包括每次检查一张网时捕获的鱼的数量。不以统一的间隔检查网络。检查日期以朱利安天数表示,以及自上次检查(或在第一次检查的情况下,自部署后)起渔网捕鱼的天数 无论如何,我想将上述原始数据转换为以下格式: 这是一个矩阵,将该期间捕获的鱼类数量分配给该期间内的每一天。矩阵的列为朱利安日,行为站点编号 我曾尝试使用一些矩阵函数来实现这一点,但我在尝试填充时间段内的所有字段时遇到了很大困难,但我不一定有一行数据用于 我在这里发布了我的一小段代码,但经过反思,我的方法非常陈旧,有

我有下面的示例数据集,其中包括每次检查一张网时捕获的鱼的数量。不以统一的间隔检查网络。检查日期以朱利安天数表示,以及自上次检查(或在第一次检查的情况下,自部署后)起渔网捕鱼的天数

无论如何,我想将上述原始数据转换为以下格式:

这是一个矩阵,将该期间捕获的鱼类数量分配给该期间内的每一天。矩阵的列为朱利安日,行为站点编号

我曾尝试使用一些矩阵函数来实现这一点,但我在尝试填充时间段内的所有字段时遇到了很大困难,但我不一定有一行数据用于

我在这里发布了我的一小段代码,但经过反思,我的方法非常陈旧,有点离题。有人能建议一种方法将数据转换成提供的矩阵吗?我一整天都在挠头,在谷歌上搜索,但现在我被难住了

干杯,
C

我在这里看不到非常明显的矩阵变换。假设原始数据位于名为
dd

dd$Site_Number<-factor(dd$Site_Number)

mm<-matrix(0, nrow=nlevels(dd$Site_Number), ncol=18)
for(i in 1:nrow(dd)) {
    mm[as.numeric(dd[i,1]), (dd[i,2]-dd[i,3]):dd[i,2] ] <- dd[i,4]
}
mm

dd$Site\u Number两个答案,第二个答案更快,但级别稍低

解决方案#1:

库(IRanges)
用(d{

ir请在问题本身中包含示例数据。如果我将其粘贴到文本中,它会变得非常混乱。我是否将其作为代码添加?我使用了第二个选项,非常成功,谢谢!!是否有任何方法可以将站点编号作为行标签,以便我可以重新检查我的数据?我一直在尝试此方法,但没有成功。
    1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18
2   0   0   100 100 100 70  70  70  70  70  65  65  22  22  22  0   0   0
100 0   45  45  45  20  20  20  20  20  20  8   8   8   8   8   8   8   8
450 10  10  10  10  10  10  10  10  10  10  4   4   4   4   0   0   0   0
dd$Site_Number<-factor(dd$Site_Number)

mm<-matrix(0, nrow=nlevels(dd$Site_Number), ncol=18)
for(i in 1:nrow(dd)) {
    mm[as.numeric(dd[i,1]), (dd[i,2]-dd[i,3]):dd[i,2] ] <- dd[i,4]
}
mm
library(IRanges)
with(d, {
  ir <- IRanges(end=Check_Day_Julian, width=Set_Duration_Days)
  cov <- coverage(split(ir, Site_Number),
                  weight=split(Fish_Caught, Site_Number),
                  width=max(end(ir)))
  do.call(rbind, lapply(cov, as.vector))
})
with(d, {
  ir <- IRanges(end=Check_Day_Julian, width=Set_Duration_Days)
  site <- factor(Site_Number, unique(Site_Number))
  m <- matrix(0, length(levels(site)), max(end(ir)))
  ind <- cbind(rep(site, width(ir)), as.integer(ir))
  m[ind] <- rep(Fish_Caught, width(ir))
  m              
})