R 分成若干个垃圾箱

R 分成若干个垃圾箱,r,bins,R,Bins,我有以下数据 A 1 6 A 2 72 A 3 90 A 4 81 A 5 81 A 6 42 A 7 12 A 8 32 A 9 34 A 10 92 B 1 44 B 2 54 B 3 10 B 4 21 B 5 47 B 6 35 B 7 94 B 8 5 B 9 35 B 10 77 B 11 9 B 12 52 B

我有以下数据

A 1 6 A 2 72 A 3 90 A 4 81 A 5 81 A 6 42 A 7 12 A 8 32 A 9 34 A 10 92 B 1 44 B 2 54 B 3 10 B 4 21 B 5 47 B 6 35 B 7 94 B 8 5 B 9 35 B 10 77 B 11 9 B 12 52 B 13 73 B 14 93 B 15 38 B 16 85 B 17 90 B 18 47 A 16 A 2 72 A 390 A 4 81 A 581 A 6 42 A 7 12 A 8 32 A 9 34 A 1092 B 1 44 B 2 54 B 3 10 B 4 21 B 5 47 B 6 35 B 7 94 B 8 5 B 9 35 B 10 77 B 11 9 B 12 52 B 13 73 B 1493 B 15 38 B 16 85 B 17 90 B 18 47 我的输出必须是

A 1 6 1 A 2 72 1 A 3 90 2 A 4 81 2 A 5 81 3 A 6 42 3 A 7 12 4 A 8 32 4 A 9 34 5 A 10 92 5 B 1 44 1 B 2 54 1 B 3 10 1 B 4 21 1 B 5 47 1 B 6 35 2 B 7 94 2 B 8 5 2 B 9 35 2 B 10 77 3 B 11 9 3 B 12 52 3 B 13 73 3 B 14 93 4 B 15 38 4 B 16 85 4 B 17 90 4 B 18 47 4 A 16 1 A 272 1 A 3902 A 4812 A 5813 A 6423 A 7124 A 8324 A 9 34 5 A 10925 B 144 1 B 2 54 1 B 3 10 1 B 4 21 1 B 5471 B 6 35 2 B 7942 B 8 5 2 B 9 35 2 B 1077 3 B 11 9 3 B 12 52 3 B 13 73 3 B 14934 B 15 38 4 B 16 85 4 B 1790 4 B 18 47 4 必须根据第一列中项目的长度来计算仓位(最后一列)。因此,对于每个箱子中的A=10/5=2

对于B,每个箱子中的18/5=3.6

我试着用seq bin=seq(from=,to=,by=)
但不知道如何进行。任何帮助都将不胜感激。谢谢

您可以按照的方法,使用
ave
为数据中的每个组应用函数

cbind(dat, bin=ave(dat$V2, dat$V1, FUN=function(x) ceiling(seq_along(x)/length(x)*5)))
#    V1 V2 V3 bin
# 1   A  1  6   1
# 2   A  2 72   1
# 3   A  3 90   2
# 4   A  4 81   2
# 5   A  5 81   3
# 6   A  6 42   3
# 7   A  7 12   4
# 8   A  8 32   4
# 9   A  9 34   5
# 10  A 10 92   5
# 11  B  1 44   1
# 12  B  2 54   1
# 13  B  3 10   1
# 14  B  4 21   2
# 15  B  5 47   2
# 16  B  6 35   2
# 17  B  7 94   2
# 18  B  8  5   3
# 19  B  9 35   3
# 20  B 10 77   3
# 21  B 11  9   4
# 22  B 12 52   4
# 23  B 13 73   4
# 24  B 14 93   4
# 25  B 15 38   5
# 26  B 16 85   5
# 27  B 17 90   5
# 28  B 18 47   5

您可以按照中的方法,使用
ave
为数据中的每个组应用函数

cbind(dat, bin=ave(dat$V2, dat$V1, FUN=function(x) ceiling(seq_along(x)/length(x)*5)))
#    V1 V2 V3 bin
# 1   A  1  6   1
# 2   A  2 72   1
# 3   A  3 90   2
# 4   A  4 81   2
# 5   A  5 81   3
# 6   A  6 42   3
# 7   A  7 12   4
# 8   A  8 32   4
# 9   A  9 34   5
# 10  A 10 92   5
# 11  B  1 44   1
# 12  B  2 54   1
# 13  B  3 10   1
# 14  B  4 21   2
# 15  B  5 47   2
# 16  B  6 35   2
# 17  B  7 94   2
# 18  B  8  5   3
# 19  B  9 35   3
# 20  B 10 77   3
# 21  B 11  9   4
# 22  B 12 52   4
# 23  B 13 73   4
# 24  B 14 93   4
# 25  B 15 38   5
# 26  B 16 85   5
# 27  B 17 90   5
# 28  B 18 47   5
我试过这个

split(df,df$Gene) -> gene gene[1] -> g as.data.frame(g) ->g1 FindBin = function(data){ START=0 END=length(g1$A.Base) noOfBin=20 jump=END/noOfBin bin = seq(from=START, to=END, by=jump) g1$bin_index = findInterval(g1$A.Base, bin) } g1$m1bin=FindBin(g1) 拆分(df,df$基因)->基因 基因[1]>g as.data.frame(g)->g1 FindBin=函数(数据){ 开始=0 结束=长度(g1$A.Base) 努夫宾=20 跳转=结束/结束 bin=seq(from=START,to=END,by=jump) g1$bin_index=findInterval(g1$A.Base,bin) } g1$m1bin=FindBin(g1) 现在,我去拿垃圾箱。。但是由于我已经将df分裂成不同的基因,如何在所有分裂的df上运行这个呢

split(df,df$Gene) -> gene gene[1] -> g as.data.frame(g) ->g1 FindBin = function(data){ START=0 END=length(g1$A.Base) noOfBin=20 jump=END/noOfBin bin = seq(from=START, to=END, by=jump) g1$bin_index = findInterval(g1$A.Base, bin) } g1$m1bin=FindBin(g1) 拆分(df,df$基因)->基因 基因[1]>g as.data.frame(g)->g1 FindBin=函数(数据){ 开始=0 结束=长度(g1$A.Base) 努夫宾=20 跳转=结束/结束 bin=seq(from=START,to=END,by=jump) g1$bin_index=findInterval(g1$A.Base,bin) } g1$m1bin=FindBin(g1)
现在,我去拿垃圾箱。。但是由于我已经将df分割成不同的基因,如何使用
数据在所有分割的df上运行此操作。表

setDT(x)[,output:=ceiling(5*(1:.N)/.N),by=V1]
> x
    V1 V2 V3 output
 1:  A  1  6      1
 2:  A  2 72      1
 3:  A  3 90      2
 4:  A  4 81      2
 5:  A  5 81      3
 6:  A  6 42      3
 7:  A  7 12      4
 8:  A  8 32      4
 9:  A  9 34      5
10:  A 10 92      5
11:  B  1 44      1
12:  B  2 54      1
13:  B  3 10      1
14:  B  4 21      2
15:  B  5 47      2
16:  B  6 35      2
17:  B  7 94      2
18:  B  8  5      3
19:  B  9 35      3
20:  B 10 77      3
21:  B 11  9      4
22:  B 12 52      4
23:  B 13 73      4
24:  B 14 93      4
25:  B 15 38      5
26:  B 16 85      5
27:  B 17 90      5
28:  B 18 47      5
    V1 V2 V3 output

使用
数据。表

setDT(x)[,output:=ceiling(5*(1:.N)/.N),by=V1]
> x
    V1 V2 V3 output
 1:  A  1  6      1
 2:  A  2 72      1
 3:  A  3 90      2
 4:  A  4 81      2
 5:  A  5 81      3
 6:  A  6 42      3
 7:  A  7 12      4
 8:  A  8 32      4
 9:  A  9 34      5
10:  A 10 92      5
11:  B  1 44      1
12:  B  2 54      1
13:  B  3 10      1
14:  B  4 21      2
15:  B  5 47      2
16:  B  6 35      2
17:  B  7 94      2
18:  B  8  5      3
19:  B  9 35      3
20:  B 10 77      3
21:  B 11  9      4
22:  B 12 52      4
23:  B 13 73      4
24:  B 14 93      4
25:  B 15 38      5
26:  B 16 85      5
27:  B 17 90      5
28:  B 18 47      5
    V1 V2 V3 output

您需要为何时获取指定规则,例如3.6,为如何处理剩菜指定规则您需要为何时获取指定规则,例如3.6,为如何处理剩菜指定规则