У меня есть фрейм данных, который выглядит как фрейм, который можно реплицировать с помощью следующего кода:
reproduce.df <- rbind.data.frame(replicate(6,sample(1:50, 50, rep = TRUE)),replicate(6,sample(NA, 5, rep = TRUE)),replicate(6,sample(1:50, 50, rep = TRUE)))
- Я хочу разрезать данные в столбце 1 на 3 части и назначить им 3 метки на основе терцили от самого низкого до самого высокого. (Скажем, метки 1,2,3)
- После присвоения меток данным в столбце 1 я хочу назначить метки в столбце 2, сначала сгруппировав значения в столбце 1 по каждой из трех переменных, а затем назначив метки с именами от 1 до 3 в каждой из этих трех групп в соответствии с терцилями. Например, самые низкие значения терцили в столбце 1 будут иметь метку «1». Для всех единиц в столбце 1 я хочу создать терцили на основе значений в столбце 2 и присвоить им метки «1», «2», «3».
- Этот процесс повторяется снова в 3-м столбце после объединения меток для данных в столбцах 1 и 2. Таким образом, для данных третьего столбца у нас есть 27 уникальных меток.
- Этот процесс снова повторяется в столбцах с 4 по 6.
Что я пробовал: использовал функцию вырезания для присвоения меток в столбце 1 и добавил его во фрейм данных. Код выглядит следующим образом:
labels.v1 <- cut(reproduce.df[,1], quantile(reproduce.df[,1], seq(from = 0, to = 1, length.out = 4), na.rm = TRUE), labels = seq(1:3), include.lowest = TRUE)
reproduce.df2 <- cbind.data.frame(reproduce.df,labels.v1)
Однако я не могу распространить эту логику на следующий шаг. На следующем шаге я использовал функцию «по», чтобы разделить фрейм данных на 3 части на основе меток столбца 1, а затем назначить метки этим трем частям.
by(reproduce.df2$V2, reproduce.df2$labels.v1, FUN = function(x) cut(x, quantile(x, seq(from=0,to=1,length.out = 4), na.rm = TRUE), labels = c("1","2","3"), include.lowest = TRUE))
Хотя это работает, но вывод, который он дает, имеет формат списка и не может быть напрямую объединен с фреймом данных. Кроме того, он удаляет NA из фрейма данных, и я хотел бы сохранить NA, поскольку эти столбцы являются частью большего фрейма данных, и я хотел бы просто объединить метки в этом фрейме данных.
Как мне проделать эту процедуру в R?