gpt4 book ai didi

r - R 中的条件 elseif 语句

转载 作者:行者123 更新时间:2023-12-01 11:32:25 26 4
gpt4 key购买 nike

我有一个看起来像这样的数据框

Animal
species sum
A 2
A 6
B 8
B 1
C 6
C 3
D 5
D 4

我想要将每个物种的最小总和除以最大总和并创建一个名为比率的新列的代码,如果该数字大于 .2,我希望它返回该比率,但如果它小于.2,我希望它返回 NA。我想在 dplyr 中这样做这是我目前拥有的代码,但无法正常工作我在 R 中有这串命令

animal <- animal %>% 
+ group_by(species) %>%
+ mutate(ratio = ifelse((min(sum)/max(sum) > .2), (min(sum)/max(sum)), "NA"))

谢谢!

最终应该是这个样子

species sum   ratio
A 2 .333
A 6 .333
B 8 NA
B 1 NA
C 6 .5
C 3 .5
D 5 .8
D 4 .8

最佳答案

我会避免使用 ifelse,因为无论如何您都必须评估整个向量,并且因为您需要对整个过程进行两次计算。这是我将如何做到这一点

library(data.table)
setDT(Animal)[, ratio := {r <- range(sum); r[1L]/r[2L]}, by = species]
Animal[ratio <= .2, ratio := NA]
# species sum ratio
# 1: A 2 0.3333333
# 2: A 6 0.3333333
# 3: B 8 NA
# 4: B 1 NA
# 5: C 6 0.5000000
# 6: C 3 0.5000000
# 7: D 5 0.8000000
# 8: D 4 0.8000000

关于r - R 中的条件 elseif 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31058319/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com