2017-01-03 9 views
1

У меня есть одна таблица со средней стоимостью «costmel» , и у меня есть одна таблица с оценкой риска 1-6 между диапазонами низких и низких средних средних.Добавьте значение в стол таблицы, просмотрев таблицу баллов

aggProb_avCostMeld table: 

      costmel 
1   19.39 
2   0.00 
3   4889.71 
4   4612.82 
5   0.00 
6   3812.52 

RisicoKostSchaal table: 

    Schaal low  high 
1  1 0 1.75e+02 
2  2 175 3.50e+02 
3  3 350 5.25e+02 
4  4 525 7.00e+02 
5  5 700 8.75e+02 
6  6 875 1.00e+08 

То, что я хочу сделать, это для каждого я в aggProb_avCostMeld $ costmel, проверить, если он находится в пределах у из RisicoKostSchaal высокого низкого диапазона и возвращает соответствующее число RisicoKostSchaal $ Schaal и положить, что в новом столбце " costrisk "в таблице aggProb_avCostMeld.

Код, который я попытался это:

for(i in aggProb_avCostMeld$costmel) { 
    for (y in RisicoKostSchaal){ 
    if(aggProb_avCostMeld$costmel[i] >= RisicoKostSchaal$low[y] & aggProb_avCostMeld$costmel[i] < RisicoKostSchaal$high[y]){ 
    aggProb_avCostMeld$costrisk[i] <- RisicoKostSchaal$Schaal[y] 
    } 

    } 
} 

Но это не сработало.

dput(aggProb_avCostMeld) 
c(19.3984518231819, 0, 4889.71644908616, 4612.82921161826, 0, 
3812.52550091075, 0, 0, 0, 1484.24951267057, 0, 789.423206278027, 
2529.65298303229, 3600.89832689833) 

dput(RisicoKostSchaal) 
structure(list(Schaal = c(1, 2, 3, 4, 5, 6), low = c(0, 175, 
350, 525, 700, 875), high = c(175, 350, 525, 700, 875, 1e+08)), .Names = c("Schaal", 
"low", "high"), row.names = c(NA, -6L), class = "data.frame") 
+0

Пожалуйста, добавьте результат 'dput (aggProb_avCostMeld)' и 'dput (RisicoKostSchaal)' на ваш вопрос, будет легче копировать/вставить. – Tensibai

+0

что ожидается выход? – mtoto

+0

что-то вроде 'RisicoKostSchaal $ Schaal [sapply (aggProb_avCostMeld $ costmel, function (i), который (i> = RisicoKostSchaal $ low & i <= RisicoKostSchaal $ high))]' – Sotos

ответ

3

Вы можете:

первый. Определите функцию, чтобы получить Schaal из RisicoKostSchaal когда определенное число падения в диапазоне c(low, high):

> checkInRange <- function(num) { 
RisicoKostSchaal$Schaal[which(RisicoKostSchaal$low <= num & RisicoKostSchaal$high >= num)] 
} 

второй. Применить эту функцию к каждому элементу в aggProb_avCostMeld:

> aggProb_avCostMeld$costrisk <- sapply(aggProb_avCostMeld$costmel, checkInRange) 


> aggProb_avCostMeld 
#  costmel costrisk 
#1: 19.39845  1 
#2: 0.00000  1 
#3: 4889.71645  6 
#4: 4612.82921  6 
#5: 0.00000  1 
#6: 3812.52550  6 
#7: 0.00000  1 
#8: 0.00000  1 
#9: 0.00000  1 
#10: 1484.24951  6 
#11: 0.00000  1 
#12: 789.42321  5 
#13: 2529.65298  6 
#14: 3600.89833  6 
+0

You может удалить «возврат» в вашей функции, функция R всегда будет возвращать значение своего последнего оператора, поэтому вызов «return» просто добавляет для интерпретатора служебные данные об искажении функции «return», которая уже вызывается в конце функция. Я согласен с тем, что я больше объясню это, но на большом наборе данных накладные расходы могут быть незначительными. – Tensibai

+1

@ Tensibai, спасибо за ваш совет и прекрасное объяснение. –