2016-07-27 3 views
1

У меня есть следующий набор данных:Сумма на основе заданного критерия

Min Max PFQty SFQty 
800 900 0  0 
800 900 0 0 
800 900 30 30 
800 1000 0 0 
800 1000 42 42 
900 1000 0 0 
900 1000 0 0 
900 1000 150 150 
900 1000 0 0 
900 1000 0 0 
900 1000 0 0 
900 1000 40 40 
900 1000 14 14 
900 1000 28 28 
900 1000 14 14 
900 1000 56 56 
900 1000 120 120 
900 1000 60 60 
900 1000 1512 1512 
900 1000 1096 1096 
900 1100 24 24 
1000 1100 9 9 
1000 1100 60 60 
1000 1100 250 250 
1000 1100 435 435 

Мне нужно суммировать столбцы PFQty только до разности между колоннами Min и Max составляет 100. Если он превышает 100, мне нужно игнорировать эти строки.

+1

Может быть 'сумма (mydf [mydf $ Макс - mydf $ Min <= 100 , "PFQty"]) '? – zx8754

+0

Нет результирующей суммы всех мест, где разница составляет 100. Вместо этого мне нужно всего от 800-900 900-1000, ... – user6016731

ответ

2

Используя dplyr, фильтр, затем группу по и сумму:

library(dplyr) 
df1 %>% 
    filter(Max - Min <= 100) %>% 
    group_by(Min, Max) %>% 
    summarise(PFQtySum = sum(PFQty)) 

#  Min Max PFQtySum 
# <int> <int> <int> 
# 1 800 900  30 
# 2 900 1000  3090 
# 3 1000 1100  754 
0

Я бы создать еще один столбец

data$diff<-abs(data$min-data$max) 

тогда было бы легко

sum(data[diff<=100,]$PFQty) 

ли это делать то, что вам нужно?

+0

Я уже это сделал, но результат не будет тем, что я хочу. Мне нужны данные, которые нужно разделить на интервалы классов и соответствующую сумму около 800-900 30 900-1000 3090 ... – user6016731

+0

, чтобы вы хотели классифицировать различия и затем суммировать столбец на основе значения разницы? –

1

Вот вариант с использованием data.table

library(data.table) 
setDT(df1)[Max - Min <= 100, .(PFQtySum = sum(PFQty)) , by = .(Min, Max)] 
# Min Max PFQtySum 
#1: 800 900  30 
#2: 900 1000  3090 
#3: 1000 1100  754 
Смежные вопросы