根据多个条件条件分配列值
assign column value based on multiple conditional criteria
我一直在努力弄清楚如何根据某些标准分配一个值。
我有一个简单的数据集:
fish <- data.frame ("method"=c("cryptic", "cryptic", "cryptic",
"quad", "quad", "quad",
"fish",
"1mquad", "1mquad"),
"species"= c("A", "B", "C",
"A", "B", "D",
"A",
"A", "B"),
"cut"=1)
如果一个物种同时具有方法 cryptic 和 quad 或 cryptic 和 1mquad,我想将 cut 的值更改为 0。
我尝试了几种不同的方法,但总是卡住。当我执行 if 语句时,我会收到奇怪的警告。我尝试过的一些事情是用神秘的
制作子集 df
cryptic <- fish [fish$method == "cryptic",]
然后尝试子集化
fish$cut [match(fish$species, cryptic$species) & fish$method =="quad"] <- 0
fish$cut [match(fish$species, cryptic$species) & fish$method =="1mquad"] <- 0
但这不起作用。我也试过创造条件:
cond3 <- fish$species %in% intersect(fish$species, cryptic$species)
cond4 <- fish$method %in% c ("1mquad", "quad", "cryptic")
并用它做一个 if 语句,但无济于事。此外,在更改为 0 之前我还有一些其他条件,所以我不能使用 ifelse 语句,因为它会覆盖其他条件。有什么建议吗?
你已经非常接近条件了。这是一个调整的方式:
crypt = unique(fish$species[fish$method == "cryptic"])
quad = unique(fish$species[fish$method %in% c("quad", "1mquad")])
to_change = intersect(crypt, quad)
fish$cut = ifelse(fish$species %in% to_change, 0, fish$cut)
fish
# method species cut
# 1 cryptic A 0
# 2 cryptic B 0
# 3 cryptic C 1
# 4 quad A 0
# 5 quad B 0
# 6 quad D 1
# 7 fish A 0
# 8 1mquad A 0
# 9 1mquad B 0
使用ifelse
语句和fish$cut
作为"else"意味着如果条件不满足,任何东西都会留在那。
我一直在努力弄清楚如何根据某些标准分配一个值。
我有一个简单的数据集:
fish <- data.frame ("method"=c("cryptic", "cryptic", "cryptic",
"quad", "quad", "quad",
"fish",
"1mquad", "1mquad"),
"species"= c("A", "B", "C",
"A", "B", "D",
"A",
"A", "B"),
"cut"=1)
如果一个物种同时具有方法 cryptic 和 quad 或 cryptic 和 1mquad,我想将 cut 的值更改为 0。
我尝试了几种不同的方法,但总是卡住。当我执行 if 语句时,我会收到奇怪的警告。我尝试过的一些事情是用神秘的
制作子集 dfcryptic <- fish [fish$method == "cryptic",]
然后尝试子集化
fish$cut [match(fish$species, cryptic$species) & fish$method =="quad"] <- 0
fish$cut [match(fish$species, cryptic$species) & fish$method =="1mquad"] <- 0
但这不起作用。我也试过创造条件:
cond3 <- fish$species %in% intersect(fish$species, cryptic$species)
cond4 <- fish$method %in% c ("1mquad", "quad", "cryptic")
并用它做一个 if 语句,但无济于事。此外,在更改为 0 之前我还有一些其他条件,所以我不能使用 ifelse 语句,因为它会覆盖其他条件。有什么建议吗?
你已经非常接近条件了。这是一个调整的方式:
crypt = unique(fish$species[fish$method == "cryptic"])
quad = unique(fish$species[fish$method %in% c("quad", "1mquad")])
to_change = intersect(crypt, quad)
fish$cut = ifelse(fish$species %in% to_change, 0, fish$cut)
fish
# method species cut
# 1 cryptic A 0
# 2 cryptic B 0
# 3 cryptic C 1
# 4 quad A 0
# 5 quad B 0
# 6 quad D 1
# 7 fish A 0
# 8 1mquad A 0
# 9 1mquad B 0
使用ifelse
语句和fish$cut
作为"else"意味着如果条件不满足,任何东西都会留在那。