【问题标题】:How can I eliminate duplicate values where certain values intersect in R?如何消除 R 中某些值相交的重复值?
【发布时间】:2021-08-06 22:12:58
【问题描述】:

这是 2005-2015 年各国之间的面板数据。

如下安排。

年 iso_i 行业 iso_j thetaij

2005 ARG D01T03 澳大利亚 0

2005 AUS D01T03 ARG 0

有两行年份和行业相同,且iso_i和iso_j相交。 我想将这两行视为重复行,只留下一个。

如果按照这个标准去掉的话,总行数就只剩下一半了。

我想出了如何用 Excel 宏文件来做,但是面板数据中的总行数是 480,000,它在 Excel 中不起作用......

我想我必须在 R 做这件事。 你能告诉我解决办法吗?

【问题讨论】:

    标签: r duplicates data-analysis data-mining


    【解决方案1】:

    建议创建一个新列,按字母顺序粘贴 iso_i 和 iso_j 字段。这就是 mutateif_else 正在做的事情。分组 (group_by) 将消除重复的行。 summarise 保留原始数据,假设它们像你说的那样相等(所以只取第一个元素):

    
    dt <- tibble(year = c(2005, 2005),
                 iso_i = c("ARG", "AUS"),
                 industry = c("D01T03", "D01T03"),
                 iso_j = c("AUS", "ARG"),
                 thetai_j = c(0, 0))
      
    dt <- dt %>% 
      mutate(iso_ij = if_else(iso_i > iso_j, 
                              paste0(iso_j, iso_i, sep = " "),
                              paste0(iso_i, iso_j, sep = " "))) %>% 
      group_by(year, industry, iso_ij) %>% 
      summarise(thetai_j = first(thetai_j),
                iso_i = first(iso_i),
                iso_j = first(iso_j)) %>% 
      select(year, iso_i, industry, iso_j, thetai_j)
    
    (dt)         
    

    最后的select 命令是以相同的顺序保存信息。

    【讨论】:

      【解决方案2】:

      据我了解,您并不关心这些重复行中的最后两列是否不同。如果是这种情况,这将起作用(只需将 df 更改为您的数据框的名称):

      library(dplyr)
      id <- which(duplicated(select(df, year, iso_i, industry))
      length(id) # check number of duplicates
      df<- df[-id,]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-10-22
        • 1970-01-01
        • 1970-01-01
        • 2015-06-23
        • 1970-01-01
        • 2021-06-16
        • 2021-03-13
        相关资源
        最近更新 更多