gpt4 book ai didi

r - 使用最大值改变 IF-Else 语句

转载 作者:行者123 更新时间:2023-12-04 08:15:14 25 4
gpt4 key购买 nike

我知道这应该很容易解决,但由于某种原因,我没有得到我正在寻找的正确输出。我有一个大型数据集,如果计数列被标记为 1 并且该行具有最大付款,我将尝试根据两个条件创建一个新列,然后创建一个新列,将其标记为 1 并标记其他列作为 0. 我创建了一个小例子:

ex <- data.frame(EOC = c(1,1,2,2,2),EOC_cnt = c(1,1,1,0,0), pay = c(500,0,200,12,34))
我想要的是:
ex <- data.frame(EOC = c(1,1,2,2,2),EOC_cnt = c(1,1,1,0,0), pay = c(500,0,200,12,34)),EOC_cnt1 = c(1,0,1,0,0)
我有:
out <- ex %>% group_by(EOC) %>% mutate(EOC_cnt1 = ifelse(EOC_cnt ==1 & pmax(pay) , "1", "0"))
它适用于这个较小的示例,但是当我将它应用于较大的数据集时,每个 EOC 组仍然没有得到一个 1。还有其他方法可以获得我正在寻找的结果吗?
(我的 EOC_cnt 列中基本上有重复项,并且想创建一个新列,其中每个 EOC 只有一个 1)
以下是答案创建全 0 的示例:
dput(ex2)
structure(list(pay = c(342.39, 48.27, 299.96, 274.12, 342.39,
121.36), EOC = c(1, 1, 1, 1, 1, 1), EOC_cnt = c(0, 1, 0, 0, 0,
0)), row.names = c(NA, -6L), class = c("data.table", "data.frame"
), .internal.selfref = <pointer: 0x000001cdf95a1ef0>)

最佳答案

我们不需要ifelse ,它可以被强制转换为二进制 +as.integer

ex %>% 
group_by(EOC) %>%
mutate(EOC_cnt1 = +(pay == max(pay) & EOC_cnt == 1))

如果有重复,那么我们使用 match找到第一个位置都为 TRUE 的位置
ex %>%
group_by(EOC) %>%
mutate(EOC_cnt1 = +(row_number() %in% which(pay == max(pay) & EOC_cnt == 1)[1]))

根据新数据'ex2',不清楚我们是否需要检查 max 'pay' 仅在 'EOC_cnt' 为 1 的元素中。在这种情况下,根据 'EOC_cnt' 1 值对 'pay' 进行子集,取 max并进行比较
ex2 %>% 
group_by(EOC) %>%
mutate(EOC_cnt2 = +(pay == max(pay[EOC_cnt == 1]) & EOC_cnt == 1))

关于r - 使用最大值改变 IF-Else 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65741186/

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