【问题标题】:How can I combine two rows and avoid duplicating the string entries in the row variables?如何合并两行并避免重复行变量中的字符串条目?
【发布时间】:2018-04-16 03:33:47
【问题描述】:

我想将数据框中的两行合并为一行,但要避免重复条目。那就是我想摆脱这个:

RowA     RowB
A,B      A,B,C
A        A

到这里:

RowA     RowB     RowC
A,B      A,B,C    A,B,C
A        A        A 

使用来自tidyr 的联合,我实际得到的是:

RowA     RowB     RowC
A,B      A,B,C    A,B,A,B,C
A        A        A,A

【问题讨论】:

    标签: r duplicates tidyr


    【解决方案1】:
    #sample data
    df <- read.table(text='colA     colB
    A,B      A,B,C
    A        A', header=T)
    
    library(dplyr)
    library(tidyr)
    temp <- df %>% unite(colC, colA, colB, sep=',')
    df$colC <- sapply(strsplit(temp$colC ,","), function(x) paste(unique(x), collapse=","))
    

    输出是:

      colA  colB  colC
    1  A,B A,B,C A,B,C
    2    A     A     A
    

    【讨论】:

      【解决方案2】:

      基础R

      df <- read.table(text="RowA     RowB
      A,B      A,B,C
      A        A", header=TRUE, stringsAsFactors=FALSE)
      
      myfun <- function(dfrow) {
                  paste(unique(unlist(strsplit(paste(dfrow, collapse=","), ","))), collapse=",")
              }
      
      df$RowC <- sapply(seq_len(nrow(df)), function(i) myfun(df[i,]))
        # RowA  RowB  RowC
      # 1  A,B A,B,C A,B,C
      # 2    A     A     A
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-06
        • 1970-01-01
        • 2021-09-08
        • 2021-03-03
        • 1970-01-01
        • 1970-01-01
        • 2020-09-04
        • 1970-01-01
        相关资源
        最近更新 更多