temp1.df$new_mpg<-apply(temp1.df, 1, function(x) {
temp<-temp2.df[temp2.df$Cyl==x[2],]
ifelse(any(apply(temp, 1, function(y) {
dplyr::between(as.numeric(x[1]),as.numeric(y[2]),as.numeric(y[3]))
})),1,0)
})
Обратите внимание, что это делает некоторые предположения об организации ваших фактических данных (в частности, я не могу назвать имена столбцов в пределах apply
, поэтому я использую индексы - которые могут очень хорошо измениться,так что вы можете захотеть переставить ваши данные между получением и вызовом apply
, или, возможно, измените организацию в пределах apply
, например, на apply(temp1.df[,c("mpg","cyl")]...
.
В любом случае, это нарушит ваши данныеустанавливается в строки, и каждая строка сравнивается с подмножеством второго набора данных с тем же числом Cyl. Внутри этого подмножества оно проверяет, падает ли any
MPG для этой строки between
(из dplyr
) Start
и End
, и возвращает 1, если да (или 0, если нет). Все эти единицы и нули затем возвращаются как (именованный) вектор, который может быть помещен в temp1.df$new_mpg
.
IЯ предполагаю, что есть способ сделать это с rowwise
, но я никогда не смогу заставить его работать должным образом ...