Почему r показывает ошибку при использовании dplyr и ifelse вместе? - PullRequest
1 голос
/ 10 января 2020

Я пытаюсь использовать функцию ifelse в группировке R, но она не работает. Мои данные примерно такие:

Breed Animal
NOR    1  
NOR    1
SWE    1
HOL    2
NOR    2
NOR    3
NOR    3

Итак, я хочу создать новую переменную, называемую "comp" для композиции, в которой, если порода для животного всегда NOR, это чистокровный, если нет, это смешано. Data.frame называется NOR, а код, который я использовал:

NOR %>%
group_by (animal) %>%%
mutate(comp= ifelse(NOR$breed == "NOR", "purebred","admixed")

Но тогда у меня появляется эта ошибка: Ошибка: столбец comp должен иметь длину 28 (размер группы) или единицу, а не 1104 .

Мне нужен вывод:

Breed Animal comp  
NOR     1     admixed
NOR     1     admixed
SWE     1     admixed
HOL     2     admixed
NOR     2     admixed
NOR     3     purebred
NOR     3     pubebred

Заранее спасибо! :)

Ответы [ 2 ]

2 голосов
/ 10 января 2020

Пример данных.

df <- tibble(
   "Breed" = c(rep("NOR", 2), "SWE", "HOL", rep("NOR", 3)),
   "Animal" = c(rep(1, 3), rep(2, 2), rep(3, 2))
)

> df
# A tibble: 7 x 2
  Breed Animal
  <chr>  <dbl>
1 NOR        1
2 NOR        1
3 SWE        1
4 HOL        2
5 NOR        2
6 NOR        3
7 NOR        3

Вместо 'NOR $ breed' вы хотите иметь только 'Breed'. Вы также хотите заключить условие во все.

df %>%
   group_by(Animal) %>%
   mutate(comp = ifelse(all(Breed == "NOR"), "purebred", "admixed"))

# A tibble: 7 x 3
# Groups:   Animal [3]
  Breed Animal comp    
  <chr>  <dbl> <chr>   
1 NOR        1 admixed 
2 NOR        1 admixed 
3 SWE        1 admixed 
4 HOL        2 admixed 
5 NOR        2 admixed 
6 NOR        3 purebred
7 NOR        3 purebred
1 голос
/ 10 января 2020

В этом случае мы можем использовать if/else, поскольку в качестве входных данных используется одно значение ИСТИНА / ЛОЖЬ

library(dplyr)
df %>%
     group_by(Animal) %>% 
     mutate(comp = if(all(Breed == "NOR")) "purebred" else "admixed")
# A tibble: 7 x 3
# Groups:   Animal [3]
#  Breed Animal comp    
#  <chr>  <dbl> <chr>   
#1 NOR        1 admixed 
#2 NOR        1 admixed 
#3 SWE        1 admixed 
#4 HOL        2 admixed 
#5 NOR        2 admixed 
#6 NOR        3 purebred
#7 NOR        3 purebred

данные

df <- structure(list(Breed = c("NOR", "NOR", "SWE", "HOL", "NOR", "NOR", 
"NOR"), Animal = c(1, 1, 1, 2, 2, 3, 3)), row.names = c(NA, -7L
), class = c("tbl_df", "tbl", "data.frame"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...