R语言:如何将分组中除最大orderid对应值外的value设为NA
解决方案
首先注意:你的orderid是字符类型,直接比较最大值可能在复杂场景(比如orderid为"10"、"2")出问题,建议先转为数值型再处理,完成后可按需转回字符型。
方法一:使用dplyr包(tidyverse工具链)
library(dplyr) df <- df %>% # 转换orderid为数值型,确保最大值判断准确 mutate(orderid = as.numeric(orderid)) %>% # 按customerid分组 group_by(customerid) %>% # 仅保留组内最大orderid对应的value,其余设为NA mutate(value = ifelse(orderid == max(orderid), value, NA)) %>% # 取消分组 ungroup() %>% # 可选:将orderid转回字符型(如果需要保持原格式) mutate(orderid = as.character(orderid))
方法二:使用Base R
# 先将orderid转为数值型 df$orderid <- as.numeric(df$orderid) # 计算每个customerid对应的最大orderid max_order_per_cust <- tapply(df$orderid, df$customerid, max) # 筛选出非最大orderid的行,将其value设为NA df$value[df$orderid != max_order_per_cust[df$customerid]] <- NA # 可选:转回orderid为字符型 df$orderid <- as.character(df$orderid)
运行任意一种方法后,得到的结果就会和你期望的一致:每个customerid组内,只有最大orderid对应的value保留原值,其余均为NA。
内容的提问来源于stack exchange,提问作者pandas123
相关产品推荐
相关产品推荐

