#r #tidyverse
Вопрос:
Если ваше решение может содержать решение, основанное на пакете tidyverse, это было бы здорово.
В принципе, я пытаюсь сгруппироваться по столбцу под названием «Атрибут» и проверить, являются ли все значения в столбце «Значения» идентифицирующими.
Это мой ожидаемый результат:
Как вы можете видеть — для Mustang столбец значений равен 1. Поэтому мы устанавливаем соответствие = «Да».
Для Corvette и зарядного устройства, поскольку одно из значений выключено, мы устанавливаем соответствие = «Нет».
Я пытался:
данные lt;- group_by(Атрибут) %gt;% изменяются(Совпадения = ifelse(первое(значение) != любое(значение), «Да», «Нет»)
Не сработало. Любая помощь будет очень признательна!
Комментарии:
1. В
any(Value)
иис не все ясно. потомуany(1)
что возвращает TRUE, тогдаany(0)
как возвращает FALSE, т. е. любое значение, не равное 0, возвращает TRUE
Ответ №1:
На самом any(Value)
деле это не то, что мы хотели, так как any
возвращает значение TRUE/FALSE в зависимости от того, имеет ли оно какое-либо значение больше 0 или нет. Кроме того, есть некоторые опечатки ( data lt;- group_by(Attribute)
— так и должно быть data %gt;% group_by(Attribute)
)
gt; any(c(1, 0, 5)) [1] TRUE gt; any(c(0, 0, 0)) [1] FALSE
Возможно, нам потребуется проверить, равно ли число различных элементов ( n_distinct
) 1 или нет
library(dplyr) data lt;- data %gt;% group_by(Attribute) %gt;% mutate(Matches = c("No", "Yes")[1 (n_distinct(Value) == 1)]) # // or using ifelse # mutate(Matches = ifelse(n_distinct(Value) == 1, "Yes", "No"))