Тестирование условия на каждом элементе матрицы - PullRequest
1 голос
/ 14 октября 2019

Я хочу проверить, больше ли каждый элемент фрейма данных, чем 0. Если он больше нуля, мы будем «покупать», иначе «продавать». Я использовал Саппи. Здесь выделено каждое значение «продать». Я использовал следующий код. Также рекомендуется для петлевого решения.

df1<-sapply(df,function(x) ifelse(x>0,yes="buy",no="sell"))

1 Ответ

1 голос
/ 14 октября 2019

Если это matrix (или даже data.frame), создайте логическую матрицу с помощью оператора сравнения. Это дает TRUE/FALSE логическую матрицу, которая имеет значение 1/0. Если мы добавим к нему 1, он изменится на 2/1 и на основе этого индекса мы сможем заменить значения (в R, индексирование начинается с 1)

df[] <- c("sell", "buy")[(df >0) + 1]

Также вв комментариях было рекомендовано не использовать sapply для matrix, поскольку matrix является vector с dim атрибутами, а элемент unit является одним элементом (в data.frame, unit является столбцом - такесли мы используем sapply/lapply, он проходит по столбцам). Здесь он проходит через элемент matrix. Таким образом, это может быть неэффективно. Для matrix, apply с MARGIN можно использовать

df[] <- apply(df, 2, FUN = function(x) ifelse(x > 0, "sell", "buy"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...