У меня есть кадр данных, который выглядит, как правило, этогоR 2D биннинг кадра данных со вторичными сложными расчетами
df.data <- data.frame(x=sample(1:9, 10, replace = T), y=sample(1:9, 10, replace=T), vx=sample(-1:1, 10, replace=T), vy=sample(-1:1, 10, replace=T))
х и у позиции. vx и vy - значения x, y для вектора 2d. Я хочу взять этот фрейм данных и «bin» на основе значений x и y, но выполнить вычисления на vx и vy. Эта функция делает это, за исключением того, что использует цикл, который будет слишком медленным для моего набора данных.
slowWay <- function(df)
{
df.bin <- data.frame(expand.grid(x=0:3, y=0:3, vx=0, vy=0, count=0))
for(i in 1:nrow(df))
{
x.bin <- floor(df[i, ]$x/3)
y.bin <- floor(df[i, ]$y/3)
print(c(x.bin, y.bin))
df.bin[df.bin$x == x.bin & df.bin$y == y.bin, ]$vx = df.bin[df.bin$x == x.bin & df.bin$y == y.bin, ]$vx + df[i, ]$vx
df.bin[df.bin$x == x.bin & df.bin$y == y.bin, ]$vy = df.bin[df.bin$x == x.bin & df.bin$y == y.bin, ]$vy + df[i, ]$vy
df.bin[df.bin$x == x.bin & df.bin$y == y.bin, ]$count = df.bin[df.bin$x == x.bin & df.bin$y == y.bin, ]$count + 1
}
return(df.bin)
}
Возможна ли эта двумерная двумерная бинарная запись в виде несингулярного цикла?
Спасибо за этот ответ. Работает отлично. На самом деле еще лучше. Мне не нужны строки со счетом 0, они были просто продуктом моего способа сделать это. – robbie