处理DataFrame重复日期行:合并修改与状态检测需求
R数据处理解决方案
1. 生成处理重复日期的df_copy
先加载原始数据,再用dplyr包处理重复行:
library(dplyr) # 加载原始DataFrame df <- structure( list( Date = structure(c(19304, 19305, 19311, 19311, 19312), class = "Date"), Category = c("4", "6", "1", "0", "3"), Units_Sold = rep(NA_real_, 5), Raised = rep(NA_real_, 5), Method = c("Trad", "Trad", "Unknown", "Trad", "Unknown"), Day = c(8, 9, 15, 15, 16) ), row.names = c(NA, -5L), class = c("tbl_df", "tbl", "data.frame") ) # 生成处理后的df_copy df_copy <- df %>% group_by(Date) %>% mutate(row_num = row_number()) %>% # 标记每组内的行顺序 ungroup() %>% # 修改重复组中除第一行外的指定列 mutate( Category = ifelse(row_num > 1, "Check Dataframe", Category), Method = ifelse(row_num > 1, "Attention", Method) ) %>% select(-row_num) # 移除辅助列 # 输出结果 print(df_copy)
执行后,重复日期的第二行(如2022-11-15的第二行)会被修改:Category变为"Check Dataframe",Method变为"Attention",其余列保持不变。
2. 创建checker布尔对象
通过判断是否存在重复日期,生成标记值1或0:
# 检查是否存在一行以上的重复日期,存在则赋值为1,否则为0 checker <- as.integer(any(duplicated(df$Date))) # 输出结果 print(checker)
这里duplicated(df$Date)会识别重复出现的日期行,any()判断是否存在至少一个重复,as.integer()将逻辑结果转为1(存在重复)或0(无重复)。
内容的提问来源于stack exchange,提问作者alec22
相关产品推荐
相关产品推荐

