如何筛选DataFrame:保留含有效name和date的唯一ID并合并行
解决方案
方法一:使用dplyr包(tidyverse生态)
按id分组后,提取每组内非NA的name和date值,最后过滤掉仍存在NA的行:
library(dplyr) df_processed <- df %>% group_by(id) %>% summarise( name = first(na.omit(name)), date = first(na.omit(date)) ) %>% filter(!is.na(name) & !is.na(date))
方法二:使用基础R
无需额外安装包,通过aggregate提取有效值后合并数据框:
# 按id提取非NA的name和date name_df <- aggregate(name ~ id, data = df, FUN = function(x) na.omit(x)[1]) date_df <- aggregate(date ~ id, data = df, FUN = function(x) na.omit(x)[1]) # 合并并过滤有效行 df_processed <- merge(name_df, date_df, by = "id") df_processed <- df_processed[!is.na(df_processed$name) & !is.na(df_processed$date), ]
说明
两种方法都默认每个id仅对应一个有效的name和date值(与示例数据逻辑一致),最终结果会保留每个唯一id,且对应行的name和date均为有效值,与你给出的df_desired完全匹配。
内容的提问来源于stack exchange,提问作者taimishu
相关产品推荐
相关产品推荐

