在R

时间:2017-01-25 19:31:35

标签: r

我有一个冲浪蛤长度的数据库,我想创建bin长度。这些蛤蜊长度从20厘米一直到180厘米。我想以3厘米的增量将这些长度合并在一起。例如,1,2或3的长度将具有3的长度,长度4,5和6将是6的长度,并且7,8,9将全部是bin长度9,依此类推。

我想要的箱子类别是3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 159 162 165 168 171 174 177 180。

我还需要将FREQ与正在装箱的长度一起添加。例如,如果我的长度为58厘米(FREQ = 2),59厘米(FREQ = 1)和60厘米(FREQ = 5),则最终结果应为60厘米,频率为8.

STA     DATE        SPP LENG FREQ
5002    06/12/85    403 82  1
5002    06/12/85    403 90  1
5002    06/12/85    403 94  2
5002    06/12/85    403 98  1
5002    06/12/85    403 99  1
5002    06/12/85    403 102 1
5002    06/12/85    403 105 1
5002    06/12/85    403 106 1
5002    06/12/85    403 107 1
5002    06/12/85    403 111 1
5003    06/12/85    403 75  1
5003    06/12/85    403 76  1
5003    06/12/85    403 92  1
5003    06/12/85    403 93  1
5003    06/12/85    403 95  1
5003    06/12/85    403 151 1
5004    06/12/85    403 130 1
5004    06/12/85    403 140 1
5004    06/12/85    403 143 1
5004    06/12/85    403 144 1
5004    06/12/85    406 145 1
5004    06/12/85    403 146 1
5004    06/12/85    406 147 1
5004    06/12/85    403 153 1

我对R来说相当新,所以我不确定如何做到这一点。请帮忙!

2 个答案:

答案 0 :(得分:0)

我相信这会回答你的问题 -

dat$bins<-ceiling(dat$LENG/3)*3
ndat<-aggregate(dat[,c('FREQ')],by=list(dat$STA,dat$DATE,dat$SPP,dat$bins),FUN=sum)

答案 1 :(得分:0)

cut()函数将数字转换为分组因子。

cutoff_lengths <- seq(0, 180, by = 3)
df$BIN <- cut(df$LENG, cutoff_lengths, labels = cutoff_lengths[-1])
table(df$BIN)

cutoff_lengths[-1]表示标签只是cutoff_lengths的第一个值。因为每个箱子位于两个切割点之间,所以比切割点少一个箱子。并且您想要向上舍入,因此最低切割点不能用作标签。