我希望有一个循环来为我执行计算,并将变量(以及识别信息)导出到新的数据框中。
我的数据如下:
每个唯一采样点(UNIQUE)有4个与之关联的数据点(它们因WAVE而不同)。
WAVE REFLECT REFEREN PLOT LOCAT COMCOMP DATE UNIQUE
1 679.9 119 0 1 1 1 11.16.12 1
2 799.9 119 0 1 1 1 11.16.12 1
3 899.8 117 0 1 1 1 11.16.12 1
4 970.3 113 0 1 1 1 11.16.12 1
5 679.9 914 31504 1 2 1 11.16.12 2
6 799.9 1693 25194 1 2 1 11.16.12 2
我想创建一个如下所示的新数据框: 对于每个独特的采样点,我想从2个特定的“WAVE”测量值计算“WBI”。
WBI PLOT .... UNIQUE
(WAVE==899.8/WAVE==970) 1 1
(WAVE==899.8/WAVE==970) 1 2
(WAVE==899.8/WAVE==970) 1 3
答案 0 :(得分:0)
取决于输入data.frame的大小,在效率方面可能有更好的解决方案,但以下内容适用于中小型数据集,并且很简单:
out.unique = unique(input$UNIQUE);
out.plot = sapply(out.unique,simplify=T,function(uq) {
# assuming that plot is simply the first PLOT of those belonging to that
# unique number. If not yo should change this.
subset(input,subset= UNIQUE == uq)$PLOT[1];
});
out.wbi = sapply(out.unique,simplify=T,function(uq) {
# not sure how you compose WBI but I assume that are the two last
# record with that unique number so it matches the first output of your example
uq.subset = subset(input,subset= UNIQUE == uq);
uq.nrow = nrow(uq.subset);
paste("(WAVE=",uq.subset$WAVE[uq.nrow-1],"/WAVE=",uq.subset$WAVE[uq.nrow],")",sep="")
});
output = data.frame(WBI=out.wbi,PLOT=out.plot,UNIQUE=out.unique);
如果输入数据很大,你可能想利用记录似乎按“UNIQUE”排序的事实;重复的data.frame子设置将是昂贵的。另外两个蓝调电话都可以组合成一个但是让它更麻烦,所以我就这样离开了。