R Data Frames - Назначение текстового значения на основе значений соседних столбцов - PullRequest
0 голосов
/ 27 января 2020

Я очень плохо знаком с R и пытаюсь сделать что-то, что, как я могу себе представить, очень просто, но я не могу заставить его работать.

Я пытаюсь добавить новый столбец, в котором будет указано: «Первый квартиль», «Второй квартиль» и т. д. 1014 *. На основе уже заполненных значений квартиля во фрейме данных. Я думал, что это будет простой оператор if else, но мой приведенный ниже код заполняет новый столбец только «Четвертым квартилем» и «Нет значения» для случая, когда в столбце есть NA, на котором основан вывод.

Мой код:

Quartile_Apply <- function(row) { 
  One_Y_return <- row[10]

  if (is.na(One_Y_return)) {
    return("No Value")
  }

    if (One_Y_return <= 25 & One_Y_return > 0) {
      return("First Quartile")
    } else if (One_Y_return <= 50 & One_Y_return > 25) {
      return("Second Quartile")
    } else if (One_Y_return <= 75 & One_Y_return >50) {
      return("Third Quartile" )
    } else {
      return("Fourth Quartile")
    }
  }

df_Fund_Fee_Data$`1Y_Perf_Quartile` <- apply(df_Fund_Fee_Data, 1, Quartile_Apply)

View(df_Fund_Fee_Data)

Часть row[10] предназначена для указания операторов if на столбец "1Y_Return_Percentile", на котором будут основываться квартили, то есть столбец с номером 10 , а затем применить ко всем строкам в фрейме данных.

Мне кажется, что это не должно быть так сложно, и я мог упустить что-то явно очевидное, но я не смог заставить его работать ! Я также попробовал несколько различных модификаций кода, поэтому я просто приложил свое текущее состояние работы.

Заранее большое спасибо, Гарри

1 Ответ

0 голосов
/ 27 января 2020

Я думаю, вы должны использовать cut / findInterval

values <- paste(c("First", "Second", "Third", "Fourth"), "Quartile")

df_Fund_Fee_Data$`1Y_Perf_Quartile` <- cut(df_Fund_Fee_Data$`1Y_Return_Percentile`, 
                                       seq(0, 100, 25), labels = values)

Или

df_Fund_Fee_Data$`1Y_Perf_Quartile` <- values[findInterval(
          df_Fund_Fee_Data$`1Y_Return_Percentile`, seq(0, 100, 25))]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...