我知道这应该很容易修复,但由于某些原因,我没有得到正确的输出,我正在寻找。我有一个大型数据集,其中我试图创建一个基于两个条件的新列--如果一个count列被标记为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只有一个)
下面是答案创建所有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>)发布于 2021-01-15 17:56:08
我们不需要ifelse,它可以强制使用+或as.integer的二进制
ex %>%
group_by(EOC) %>%
mutate(EOC_cnt1 = +(pay == max(pay) & EOC_cnt == 1))如果存在重复项,则使用match查找第一个位置,其中两者均为真。
ex %>%
group_by(EOC) %>%
mutate(EOC_cnt1 = +(row_number() %in% which(pay == max(pay) & EOC_cnt == 1)[1]))根据新的数据“EX2”,尚不清楚是否只需要在“max”为1的元素中检查“EOC_cnt”的“支付”。
ex2 %>%
group_by(EOC) %>%
mutate(EOC_cnt2 = +(pay == max(pay[EOC_cnt == 1]) & EOC_cnt == 1))https://stackoverflow.com/questions/65741186
复制相似问题