У меня есть конкретная задача обработки данных в R, где мне нужно разделить переменную-предиктор на перекрывающиеся «окрестности» (или диапазоны) и подобрать линейную модель (простую / двумерную) для каждого & ...

1
Yang Wu 19 Мар 2021 в 19:12

1 ответ

Лучший ответ

Тот факт, что вы хотите, чтобы наблюдения x, равные точкам останова, попадали в обе смежные категории, делает это более сложным, но это должно работать и быть довольно быстрым. В общем, если вы выполняете задачи многократно с данными, будет проще, если эти данные будут в длинном формате, а не в столбцовом формате.

library(data.table)
data <- data.table(y = as.integer(rnorm(10, mean = 100, sd = 20)), x = seq.int(0,9))

setDT(data) 
lookup <- data.table(start=c(0,  0.5, 1.5, 2.5, 3.5, 4.5, 5.5), end=c(2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5),neighborhood=1:7)
new <- data[lookup, ,on=c("x>=start","x<=end")] #not just an interval join, but also expands the data
new[,x.1:=NULL] #drop the interval join column since it's not needed

new[, fitted(lm(y~x,data=.SD))[2],by="neighborhood"]

Решение Хенрика с .EACHI:

library(data.table)
data <- tibble(y = as.integer(rnorm(10, mean = 100, sd = 20)), x = seq.int(0,9))

setDT(data) 
lookup <- data.table(start=c(0,  0.5, 1.5, 2.5, 3.5, 4.5, 5.5), end=c(2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5),neighborhood=1:7)
data[lookup, list(.GRP,fitted(lm(y~x.x,data=.SD))[2]),on=c("x>=start","x<=end"),by=.EACHI] 

0
Michael 19 Мар 2021 в 16:54