如何在R中基于两指定列筛选重复行并保留唯一行?
在R中基于指定列保留唯一行的实现方法
你可以通过以下两种常用方法实现需求:基于student和grade列的组合去重,仅保留每组的第一行,同时保留其他列的对应值。
方法一:使用dplyr包(tidyverse生态)
dplyr的distinct()函数可以直接指定去重的列,并通过.keep_all = TRUE参数保留其他列的内容:
# 先加载dplyr包(未安装则先运行install.packages("dplyr")) library(dplyr) df1 <- tibble(student=c("John", "John", "John", "Mark", "June"), grade=c("A", "A", "A", "B", "A"), age=c(18,16, 14, 19, 20), city=c("Chicago", "Seattle", "LA", "SF", "LA")) # 执行去重 df2 <- df1 %>% distinct(student, grade, .keep_all = TRUE) # 查看结果 df2
运行后得到的df2与你期望的输出一致:
# A tibble: 3 × 4 student grade age city <chr> <chr> <dbl> <chr> 1 John A 18 Chicago 2 Mark B 19 SF 3 June A 20 LA
方法二:使用Base R
无需额外安装包,利用duplicated()函数筛选出首次出现的行:
df1 <- tibble(student=c("John", "John", "John", "Mark", "June"), grade=c("A", "A", "A", "B", "A"), age=c(18,16, 14, 19, 20), city=c("Chicago", "Seattle", "LA", "SF", "LA")) # 基于student和grade列判断重复,保留非重复行(即首次出现的行) df2 <- df1[!duplicated(df1[c("student", "grade")]), ] # 查看结果 df2
该方法同样能生成符合要求的输出。
内容的提问来源于stack exchange,提问作者James Rider
相关产品推荐
相关产品推荐

