【问题标题】:Get the unique elements from the data frame by comparing two column values通过比较两列值从数据框中获取唯一元素
【发布时间】:2020-05-25 04:13:09
【问题描述】:

我从正则表达式中提取了一些元素并将它们组合起来。现在在最后的 df 中,我在数据框中有两列。我必须根据 f2 列从 f1 列中获取唯一元素。


df <- as.data.frame(rbind(c('11061002','11862192','11083069'),
                          c(" ",'1234567','452589')))

df$f1 <-paste0(df$V1,
               ',',
               df$V2,
               ',',
               df$V3)            


df_1 <- as.data.frame(rbind(c('11862192'),
                            c('145')))



names(df_1)[1] <-'f2'


df <- as.data.frame(cbind(df,df_1))

df <-df[,c(4,5)]

预期的输出是带有值的第三列: 11061002,11083069 和 11862192 都存在于两者中。 ,1234567,452589 因为第二列中没有 145。

请指导。

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以将, 上的字符串拆分为f1,并在删除空值后使用setdiff 获取f2 中不存在的值。

    mapply(function(x, y) toString(setdiff(x[x!=' '], y)), 
                          strsplit(df$f1, ','), df$f2)
    #[1] "11061002, 11083069" "1234567, 452589" 
    

    如果f2 中可能有多个逗号分隔值,我们也可以拆分f2

    mapply(function(x, y) toString(setdiff(x[x!=' '], y)), 
                          strsplit(df$f1, ','), strsplit(df$f2, ','))
    

    【讨论】:

      【解决方案2】:

      我们可以使用tidyverse

      library(dplyr)
      library(tidyr)
      df %>% 
        mutate(rn = row_number()) %>%
        separate_rows(f1, f2) %>% 
        group_by(rn)%>% 
        summarise(new = toString(setdiff(setdiff(f1, f2), ""))) %>%
        select(-rn) %>% 
        bind_cols(df, .)
      # A tibble: 2 x 6
      #  V1         V2       V3       f1                           f2       new               
      #  <chr>      <chr>    <chr>    <chr>                        <chr>    <chr>             
      #1 "11061002" 11862192 11083069 "11061002,11862192,11083069" 11862192 11061002, 11083069
      #2 " "        1234567  452589   " ,1234567,452589"           145      1234567, 452589  
      

      【讨论】:

        猜你喜欢
        • 2020-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-30
        • 1970-01-01
        • 2019-12-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多