我有一张桌子,我想
将每四行分组为连续的组
将每一行与前一组中的4行进行比较
实际上,我将一次使用四行作为参考集,其中将比较以下四组中的每一行。
具体地,给定组x中的行,我想要计算前一组(即组x-1)中有多少行具有小于或等于感兴趣行中的值的值。
我想为每一行做这个。
因此,我想对第二组四行(比如说5到8)中的每一行计算在第一组中具有小于或等于它的值的行数(比如第1行)到4)。然后第5行到第8行成为接下来的四行(9到12)的下一个参考组。等...
Row Values
1 1.35
2 0.71
3 1.00
4 0.07
5 0.53
6 0.12
7 0.36
8 2.03
9 3.83
10 1.30
11 2.17
12 1.71
13 1.52
14 1.27
15 0.29
16 0.05
17 0.14
结果如下:
Row Values Count
1 1.35
2 0.71
3 1.00
4 0.07
5 0.53 1
6 0.12 1
7 0.36 1
8 2.03 4
9 3.83 4
10 1.30 3
11 2.17 4
12 1.71 3
13 1.52 1
14 1.27 0
15 0.29 0
16 0.05 0
17 0.14 1
答案 0 :(得分:2)
您可以尝试(如果df
是您的data.frame):
sdf<-split(df$Values,(df$Row-1)%/%4)
c(rep(NA,4),unlist(Map(f=function(x,y)
findInterval(x,sort(y)),sdf[-1],sdf[-length(sdf)]),use.names=F))
#[1] NA NA NA NA 1 1 1 4 4 3 4 3 1 0 0 0 1
答案 1 :(得分:0)
你可以试试这个:
dat<-data.frame(row=c(1:length(z)),Values=z,ceiling=c(rep(NA,length(z))),count=c(rep(NA,length(z))))
#where z is a vector of your values.
for(x in 1:dim(dat)[1]) {
dat$ceiling[x]<-ceiling(x/4)
dat$count[x]<-length(which(dat$Values[dat$ceiling == (dat$ceiling[x]-1)] <= dat$Values[x]))
}
答案 2 :(得分:0)
将g.insert(0, 1, temp);
功能与ceiling
或lapply
一起使用。
vapply
接受一个数字参数ceiling
并返回一个数字向量,其中包含不小于x
的对应元素的最小整数
要获得所需效果,请将x除以每组中所需的行数。
x
(假设ceiling(x/y) #where x = the row number and y = the number of rows per group
是您的data.frame):
使用df
:
lapply
或与z <- df$Values
Groups <- ceiling(seq(z)/4)
df$Count <-
unlist(lapply(seq(z), function(x) sum(z[x] >= z[Groups == Groups[x] - 1])))
:
vapply
如果您想要一个命令:
df$Count <-
vapply(seq(z), function(x) sum(z[x] >= z[Groups == Groups[x] - 1]), integer(1))