根据时间间隔的情况

问题描述 投票:1回答:1

在R中;

我想根据表中的时间间隔放置这些“点”

enter image description here

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

但是它不应该像它应该与我的下表所述的列一样工作!

enter image description here

谢谢!

r if-statement intervals bins
1个回答
1
投票

您可以使用findIntervalpoints链接到数字。

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))
© www.soinside.com 2019 - 2024. All rights reserved.