You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用R语言删除重复行并根据首列内容合并数据集内容?

问题1:如何使用R语言删除数据集中的重复行?

我平时处理重复行常用这几个办法,简单又好用:

  • base R原生方法

    • unique()函数:直接传入数据集,它会自动返回去重后的结果,比如:
      # 假设你的数据集叫df
      df_unique <- unique(df)
      
    • duplicated()函数:这个函数会返回一个逻辑向量,标记哪些行是重复的,我们可以用它来筛选出不重复的行:
      df_unique <- df[!duplicated(df), ]
      
      要是想保留最后一次出现的重复行,还可以加个fromLast = TRUE参数:
      df_unique <- df[!duplicated(df, fromLast = TRUE), ]
      
  • dplyr包方法(更直观)
    如果你用tidyverse系列的包,distinct()函数简直是神器,不仅能去重,还能指定保留哪些列:

    library(dplyr)
    # 完全去重
    df_unique <- df %>% distinct()
    # 只根据某几列去重,保留其他列的第一行
    df_unique <- df %>% distinct(col1, col2, .keep_all = TRUE)
    
问题2:根据第一列内容合并对应内容

虽然你没贴原始数据集和具体的期望格式,但我猜大概率是要按第一列分组,把同一组的其他列内容合并到一起,比如把同一个分类下的文本拼接起来。我给你举个常见场景的例子:

假设你的原始数据是这样的:

df <- data.frame(
  分类 = c("水果", "水果", "蔬菜", "蔬菜"),
  名称 = c("苹果", "香蕉", "白菜", "萝卜")
)

想要得到的结果是每行对应一个分类,名称列合并成“苹果,香蕉”这种格式,那可以这么做:

  • 用dplyr包实现

    library(dplyr)
    library(stringr) # 用来拼接字符串
    df_merged <- df %>%
      group_by(分类) %>% # 按第一列(这里是“分类”列)分组
      summarise(合并后的名称 = str_c(名称, collapse = ", ")) %>% # 拼接内容
      ungroup()
    
  • base R原生方法
    aggregate()函数也能搞定:

    df_merged <- aggregate(名称 ~ 分类, data = df, FUN = function(x) paste(x, collapse = ", "))
    

要是你的需求和这个例子不一样,也可以调整函数里的拼接逻辑,比如换成换行符或者其他分隔符都没问题~

内容的提问来源于stack exchange,提问作者Chamil Rathnayake

火山引擎 最新活动