Как уже упоминалось @Hong Ooi apply
преобразует кадр данных в матрицу и, следовательно, все ваши числа преобразуются в символы. Вы можете исправить цикл apply
, выполнив команду
apply(df, 1, function(x) as.integer(any(as.numeric(x["ms"]) - df$ms == 1e+6 &
as.numeric(x["price"])/df$price >= 1)))
Тем не менее, я думаю, что лучшим подходом здесь будет использование mapply
, так как вы хотите проверить условия для price
и ms
.
as.integer(mapply(function(x, y)
any(x - df$ms == 1e+6 & y/df$price >= 1),df$ms, df$price))
Аналогичный подход с использованием data.table
library(data.table)
setDT(df)[, ans := as.integer(any(ms - df$ms == 1e+6 &
price/df$price >= 1)), by = seq_len(nrow(df))]
и tidyverse
library(dplyr)
library(purrr)
df %>%
mutate(ans = map2(ms, price,
~as.integer(any(.x - df$ms == 1e+6 & .y/df$price >= 1))))