【问题标题】:How to order & count the number of duplicates for each unique value in R?如何订购和计算 R 中每个唯一值的重复次数?
【发布时间】:2021-08-12 07:57:21
【问题描述】:

我正在处理房地产市场上的抓取数据,我有一个包含一些重复数据的数据集,这些数据是有条件地根据一组特征找到的。假设我有观察 A、B 和 C,除租金值和日期(日期 A

我创建了一个列,告诉我每个观察是否重复。所以我看到一列具有“FALSE”“TRUE”“FALSE”“FALSE”“TRUE”值的标准序列。

我想创建另一个列来告诉我,对应于“TRUE”,这是它的序数。例如,在我的示例中,我希望对应于观察 B 的值为 2,对应于 obs C 的值为 3,依此类推。

在 R 中有没有办法做到这一点?

谢谢。

【问题讨论】:

  • dput(head(data_frame_name, 20))的发布输出
  • 如果您创建一个小的可重现示例以及预期的输出,这将更容易提供帮助。阅读how to give a reproducible example

标签: r count duplicates


【解决方案1】:

您没有提供任何代码或数据,因此很难提供准确的答案。

但是,假设您的数据是 df,使用 dplyr 您可以执行以下操作:

df <- tibble(
  x = c(1:2,5,8,4),
  y = c(1:2,8,8,9),
  duplicated = c(TRUE,TRUE,FALSE,TRUE,FALSE)
)

> df %>% 
+   group_by(duplicated) %>% 
+   mutate(ordinality = ifelse(duplicated,row_number(),NA))
# A tibble: 5 x 4
# Groups:   duplicated [2]
      x     y duplicated ordinality
  <dbl> <dbl> <lgl>           <int>
1     1     1 TRUE                1
2     2     2 TRUE                2
3     5     8 FALSE              NA
4     8     8 TRUE                3
5     4     9 FALSE              NA

这就是你要找的吗?

【讨论】:

    【解决方案2】:

    如果您已经有一个名为“duplicates”的列具有 TRUE/FALSE 值,您可以使用 group_by()cumsum() 来计算连续重复,例如

    # Load libraries
    library(tidyverse)
    
    # Load dataset
    data(us_rent_income)
    df <- us_rent_income
    
    # Create example dataset 
    df2 <- df %>%
      bind_rows(., df, df, df) %>% 
      arrange(NAME) %>% 
      filter(variable == "rent") %>% 
      mutate(duplicates = ifelse(
        lag(NAME, n = 1, default = "FALSE") != NAME, "FALSE", "TRUE")
        ) %>% 
      select(NAME, variable, estimate, duplicates)
    
    df2
    ## A tibble: 208 x 4
    #   NAME    variable estimate duplicates
    #   <chr>   <chr>       <dbl> <chr>     
    # 1 Alabama rent          747 FALSE     
    # 2 Alabama rent          747 TRUE      
    # 3 Alabama rent          747 TRUE      
    # 4 Alabama rent          747 TRUE      
    # 5 Alaska  rent         1200 FALSE     
    # 6 Alaska  rent         1200 TRUE      
    # 7 Alaska  rent         1200 TRUE      
    # 8 Alaska  rent         1200 TRUE      
    # 9 Arizona rent          972 FALSE     
    #10 Arizona rent          972 TRUE      
    
    # Add the duplicate_ordinality column
    df3 <- df2 %>% 
      group_by(NAME) %>% 
      mutate(duplicate_ordinality = cumsum(duplicates == "TRUE")) %>% 
      ungroup()
    
    df3
    ## A tibble: 208 x 5
    #   NAME    variable estimate duplicates duplicate_ordinality
    #   <chr>   <chr>       <dbl> <chr>                     <int>
    # 1 Alabama rent          747 FALSE                         0
    # 2 Alabama rent          747 TRUE                          1
    # 3 Alabama rent          747 TRUE                          2
    # 4 Alabama rent          747 TRUE                          3
    # 5 Alaska  rent         1200 FALSE                         0
    # 6 Alaska  rent         1200 TRUE                          1
    # 7 Alaska  rent         1200 TRUE                          2
    # 8 Alaska  rent         1200 TRUE                          3
    # 9 Arizona rent          972 FALSE                         0
    #10 Arizona rent          972 TRUE                          1
    
    

    【讨论】:

      猜你喜欢
      • 2015-10-28
      • 2012-10-25
      • 2017-02-09
      • 2021-11-12
      • 2011-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-03
      相关资源
      最近更新 更多