我尝试在R分组中使用"ifelse“函数,但它不起作用。我的数据是这样的:
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 (组大小)或1,而不是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提前感谢!:)
发布于 2020-01-11 02:40:40
在这种情况下,我们可以使用if/else,因为输入是单个TRUE/FALSE值
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"))发布于 2020-01-10 23:38:07
示例数据。
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‘即可。您还希望将条件包装在“all”中。
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 purebredhttps://stackoverflow.com/questions/59684597
复制相似问题