Я работаю в R
с фреймом данных, состоящим из числовой переменной и символьной переменной. Мой фрейм данных DF
выглядит так (я добавляю версию dput
в заключительной части):
a1 b1
1 a 10.15
2 a 25.10
3 a 32.40
4 a 56.70
5 a 89.02
6 b 90.50
7 b 78.53
8 b 98.12
9 b 34.30
10 b 99.75
В DF
переменная a1
является групповой переменной, а b1
— числовой переменной. Тогда появляется дилемма. Я хочу создать новую переменную с именем c1
, используя функцию cut
и учитывая группу, сохраненную в a1
. По этой причине я объединяю обе функции ifelse()
и cut()
в следующей строке кода:
DF$c1=ifelse(DF$a1=="a",
cut(DF$b1,breaks = c(0,25,50,70,max(DF$b1)),right = TRUE,include.lowest = TRUE),
ifelse(DF$a1=="b",
cut(DF$b1,breaks = c(0,50,max(DF$b1)),right = TRUE,include.lowest = TRUE),NA))
Строка кода работала нормально, но новые значения, созданные в c1
, приводят к путанице. Вместо того, чтобы показывать фактор, cut()
возвращает целые числа. Затем я получил этот результат:
table(DF$c1,exclude=NULL)
1 2 3 4 <NA>
2 6 1 1 0
Несмотря на создание разрывов, целые числа, выделенные в c1
, меняют результат. Этого не происходит, когда я работаю без ifelse, но в этом случае я не согласовываю условия над группой. Например, следующая строка кода возвращает такой результат:
DF$c1=cut(DF$b1,breaks = c(0,25,50,70,max(DF$b1)),right = TRUE,include.lowest = TRUE)
table(DF$c1,exclude=NULL)
[0,25] (25,50] (50,70] (70,99.8] <NA>
1 3 1 5 0
Я хотел бы знать, как разрешить это поведение между функциями ifelse()
и cut()
, потому что возвращаемые целые числа приводят к различиям в конечном результате. В этом примере я работаю только с двумя группами для переменной a1
, но у меня большая база данных со многими группами. Вот почему я комбинирую функции, чтобы получить разные нарезки для каждой группы. Также могут меняться значения разрывов, поэтому включение меток вручную может занять много времени. Возможно ли, что комбинация этих двух функций возвращает правильные метки для каждой группы (фактора) вместо целых чисел. Версия dput()
моего фрейма данных DF
следующая:
DF<-structure(list(a1 = c("a", "a", "a", "a", "a", "b", "b", "b",
"b", "b"), b1 = c(10.15, 25.1, 32.4, 56.7, 89.02, 90.5, 78.53,
98.12, 34.3, 99.75)), .Names = c("a1", "b1"), row.names = c(NA,
-10L), class = "data.frame")
Спасибо за вашу помощь!