gpt4 book ai didi

r - 在基于字符串部分匹配的数据帧中创建新列而不重复

转载 作者:行者123 更新时间:2023-12-04 20:03:18 25 4
gpt4 key购买 nike

我有一个包含 2 列 GLGLDESC 的数据框,并且想根据列 KIND 内的一些数据添加一个名为 GLDESC 的第三列。

DF:

      GL                             GLDESC
1 515100 Payroll-ISL
2 515900 Payroll-ICA
3 532300 Bulk Gas
4 551000 Supply AB
5 551000 Supply XPTO
6 551100 Supply AB
7 551300 Intern

对于数据表的每一行:
  • 如果 GLDESC 在字符串中的任何位置包含单词 Payroll ,那么我希望 KINDPayroll
  • 如果 GLDESC 在字符串的任何位置包含单词 Supply ,那么我希望 KINDSupply
  • 在所有其他情况下,我希望 KINDOther

  • 然后,我发现了这个:

    DF$KIND <- ifelse(grepl("supply", DF$GLDESC, ignore.case = T), "Supply", 
    ifelse(grepl("payroll", DF$GLDESC, ignore.case = T), "Payroll", "Other"))

    但是有了这个,我就有了与 Supply 匹配的所有内容,例如,分类的。但是,与 DF 第 4 行和第 5 行一样,相同的 GL 有两个 Supply ,这对我来说是不必要的。事实上,如果对于相同的 GLDESC 字符串重复,我只需要匹配一种类型的 GL

    编辑:我无法删除任何行。我想把它作为输出:
    GL  GLDESC   KIND

    A Supply1 Supply
    A Supply2 N/A
    A Supply3 N/A
    A Supply4 N/A
    A Supply5 N/A
    A Supply6 N/A
    A Payroll1 Payroll
    B Supply2 Supply
    B Payroll Payroll

    最佳答案

    如果我们需要重复元素为 NA ,请在 'GLDESC' 上使用 duplicated 来获取逻辑向量,并将使用 ifelse 创建的 'KIND' 中的这些元素分配给 NA

    DF$KIND[duplicated(DF$GLDESC)] <- NA_character_

    如果我们需要通过分组变量更改值
    library(dplyr)
    DF %>%
    group_by(GL) %>%
    mutate(KIND = replace(KIND, duplicated(KIND) & KIND == "Supply", NA_character_))

    # A tibble: 9 x 3
    # Groups: GL [2]
    # GL GLDESC KIND
    # <chr> <chr> <chr>
    #1 A Supply1 Supply
    #2 A Supply2 <NA>
    #3 A Supply3 <NA>
    #4 A Supply4 <NA>
    #5 A Supply5 <NA>
    #6 A Supply6 <NA>
    #7 A Payroll1 Payroll
    #8 B Supply2 Supply
    #9 B Payroll Payroll

    或者完全改变
     DF1 %>%
    mutate(KIND = str_remove(GLDESC, "\\d+"),
    KIND = replace(KIND, !KIND %in% c("Supply", "Payroll"), "Othere")) %>%
    group_by(GL) %>%
    mutate(KIND = replace(KIND, duplicated(KIND) & KIND == "Supply", NA_character_))

    数据
    DF1 <- structure(list(GL = c("A", "A", "A", "A", "A", "A", "A", "B", 
    "B"), GLDESC = c("Supply1", "Supply2", "Supply3", "Supply4",
    "Supply5", "Supply6", "Payroll1", "Supply2", "Payroll")), row.names = c(NA,
    -9L), class = "data.frame")

    关于r - 在基于字符串部分匹配的数据帧中创建新列而不重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58104634/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com