【问题标题】:Replace duplicate elements in a column in R [duplicate]替换R中列中的重复元素[重复]
【发布时间】:2020-07-15 15:23:19
【问题描述】:

我有一个看起来像这样的 data.frame -

columnA=c(1,2,3,1.1,2.2,3.3,1,2)
columnB=c("a","b","c","d","e","f","g","h")

data=data.frame(columnA, columnB)

  columnA columnB
1     1.0       a
2     2.0       b
3     3.0       c
4     1.1       d
5     2.2       e
6     3.3       f
7     1.0       g
8     2.0       h

我想在 A 列中找到重复项并将它们替换为相同的元素 B列中的行。我希望C列是这样的

  columnA columnB  columnC
1     1.0       a    1.0
2     2.0       b    2.0
3     3.0       c    3.0
4     1.1       d    1.1
5     2.2       e    2.2
6     3.3       f    3.3
7     1.0       g     g
8     2.0       h     h

在 A 列的第 7 行和第 8 行中重复 1.0 和 3.0 已被替换为 B 列 [g 和 h] 的第 7 行和第 8 行中的相应元素

任何帮助将不胜感激。为此苦苦挣扎了很久。

【问题讨论】:

    标签: r dplyr aggregate plyr


    【解决方案1】:

    试试这个

    within(data, columnC <- ifelse(duplicated(columnA), columnB, columnA))
    
      columnA columnB columnC
    1     1.0       a       1
    2     2.0       b       2
    3     3.0       c       3
    4     1.1       d     1.1
    5     2.2       e     2.2
    6     3.3       f     3.3
    7     1.0       g       g
    8     2.0       h       h
    

    【讨论】:

      【解决方案2】:

      这是另一种选择。按列 A 分组,如果我们看到 A 第一次出现,则使用 A,否则使用 B。

      library(tidyverse)
      
      data <- tibble(columnA = c(1,2,3,1.1,2.2,3.3,1,2), 
                     columnB =c("a","b","c","d","e","f","g","h"))
      
      data %>%
        group_by(columnA) %>%
        mutate(columnC = ifelse(row_number() == 1, as.character(columnA), columnB))
      #> # A tibble: 8 x 3
      #> # Groups:   columnA [6]
      #>   columnA columnB columnC
      #>     <dbl> <chr>   <chr>  
      #> 1     1   a       1      
      #> 2     2   b       2      
      #> 3     3   c       3      
      #> 4     1.1 d       1.1    
      #> 5     2.2 e       2.2    
      #> 6     3.3 f       3.3    
      #> 7     1   g       g      
      #> 8     2   h       h
      

      【讨论】:

        【解决方案3】:

        你可以试试:

        data$columnC <- data$columnA
        data$columnC[duplicated(data$columnA)]<-data$columnB[duplicated(data$columnA)]
          columnA columnB columnC
        1     1.0       a       1
        2     2.0       b       2
        3     3.0       c       3
        4     1.1       d     1.1
        5     2.2       e     2.2
        6     3.3       f     3.3
        7     1.0       g       g
        8     2.0       h       h
        

        【讨论】:

          【解决方案4】:

          您可以将columnA 值复制到columnC 中,然后将duplicated 值替换为columnB

          data$columnC <- data$columnA
          inds <- duplicated(data$columnA)
          data$columnC[inds] <- data$columnB[inds]
          data
          
          #  columnA  columnB  columnC
          #1     1.0       a        1
          #2     2.0       b        2
          #3     3.0       c        3
          #4     1.1       d      1.1
          #5     2.2       e      2.2
          #6     3.3       f      3.3
          #7     1.0       g        g
          #8     2.0       h        h
          

          请注意,您在这里混合了数据类型,因此columnC 中的值将属于“字符”类。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-01-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-24
            • 2021-03-03
            • 1970-01-01
            • 2018-07-18
            相关资源
            最近更新 更多