通过查找分数 table 为 table 列添加值
Add value to table column by looking up in score table
我有一个 table,平均成本 "costmel"
我有一个 table 的风险评分在这些平均成本的高低范围之间 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 中的每个 i,
检查它是否落在 RisicoKostSchaal 高低范围的 y 和 return 相应数量的 RisicoKostSchaal$Schaal 内,并将其放在 aggProb_avCostMeld table 的新列 "costrisk" 中。
我试过的代码是:
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")
你可以:
第一。定义一个函数,当特定数字落在 c(low, high)
:
范围内时,获取 Schaal
of RisicoKostSchaal
> 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
我有一个 table,平均成本 "costmel" 我有一个 table 的风险评分在这些平均成本的高低范围之间 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 中的每个 i, 检查它是否落在 RisicoKostSchaal 高低范围的 y 和 return 相应数量的 RisicoKostSchaal$Schaal 内,并将其放在 aggProb_avCostMeld table 的新列 "costrisk" 中。
我试过的代码是:
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")
你可以:
第一。定义一个函数,当特定数字落在 c(low, high)
:
Schaal
of RisicoKostSchaal
> 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