在R中;
我想根据表中的时间间隔放置这些“点”
df <- data.frame(
category=c("aa","aa","aa","bb","bb","bb"),
intervals = c("[-Inf,20)", "[20,212)", "[212,Inf)", "[-Inf,150)", "[150,260)","[260,Inf)"),
points = c(45, 15, 35, -15,10,35))
情况是:
如果'category'= aa,那么如果'intervals'= [20,212)则points = 15
但是它不应该像它应该与我的下表所述的列一样工作!
谢谢!
您可以使用findInterval
将points
链接到数字。
y$points <- sapply(seq_len(nrow(y)), function(i) {
x[[y$category[i]]]$points[findInterval(y$intervals[i], x[[y$category[i]]]$intervalls)]
})
y
# category intervals points
#1 aa -50 45
#2 aa 25 15
#3 aa 55 15
#4 aa 250 35
#5 bb 5 -15
#6 bb 170 10
#7 bb 290 35
数据:
x <- list(aa=list(intervalls=c(-Inf, 20, 212, Inf), points=c(45,15,35))
,bb=list(intervalls=c(-Inf, 150, 260, Inf), points=c(-15,10,35)))
y <- data.frame(category=c("aa","aa","aa","aa","bb","bb","bb")
, intervals=c(-50,25,55,250,5,170,290))