Я работаю в R
с файловой рамкой, состоящей из числовой переменной и символьной переменной. Мой dataframe DF
выглядит следующим образом (я добавляю версию dput
в заключительной части):Странное поведение между функциями cut и ifelse в R
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
, но у меня есть большая база данных со многими группами. Именно по этой причине я совмещаю функции для получения разных сокращений для каждой группы. Также значения изменений могут измениться, поэтому включение меток вручную может быть длинным. Возможно ли, что комбинация этих двух функций вернет правильные метки для каждой группы (фактора) вместо целых чисел. Версия моего dataframe DF
dput()
является следующим:
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")
Спасибо за вашу помощь!
Да, но как вы разбираете фактор? –
Что вы имеете в виду? Сортировка строк в кадре данных? или уровни? – scoa
Когда вы конвертируете в символ, разрывы коэффициентов не выравниваются правильно, поэтому, когда вы делаете это с помощью c1, порядок фактора не упорядочен должным образом. Или когда вы рисуете с использованием фактора в качестве переменной x, порядок неверен. –