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