gpt4 book ai didi

r - 检查每个具有相同唯一 ID 的唯一值

转载 作者:行者123 更新时间:2023-12-04 11:27:10 26 4
gpt4 key购买 nike

我有一个 excel 表,它看起来像:

Col1    Col2
IJ-123 A2B1
IJ-123 A2B1
IJ-456 C2C2
IJ-456 c2c2
IJ-456 D1e2
IJ-789 LJ87
IJ-456
IJ-789 LJ98

x = data.frame(
Col1 = c("IJ-123", "IJ-123", "IJ-456", "IJ-456",
"IJ-456", "IJ-789", "IJ-456", "IJ-789"),
Col2 = c("A2B1", "A2B1", "C2C2", "c2c2",
"D1e2", "LJ87", NA, "LJ98")
)

我想再添加一列并检查(对于每个唯一的 Col2 值)在 Col1 中分配的值是 TRUE 还是 FALSE

输出:
Col1    Col2  Result
IJ-123 A2B1 TRUE
IJ-123 A2B1 TRUE
IJ-456 C2C2 TRUE
IJ-456 c2c2 TRUE
IJ-456 D1e2 FALSE
IJ-789 LJ87 TRUE (Because Col2 count=1 for this value)
IJ-456 C2C2
IJ-789 LJ98 TRUE (Because Col2 count=1 for this value)

逻辑:
  • 如果 col2 中的值多于 1,则检查
    那些 col2 值对应的 col1 值是相同的
  • 如果只有一个 col2 值,则检查 col1 是否唯一
    但仅针对多次出现的 col2 值的 col1 值。
  • 如果我们有重复的 Col2,那么 Col1 中的某些字段是空白的
    值比显示映射到结果中的那些 Col2Col1 值(见第 7 行)。

  • 为此,我有一个 excel 公式 =IF(COUNTIF($B$2:$B$8,B2)=1,SUMPRODUCT(--(($A$2:$A$8=A2)*(COUNTIF($B$2:$B$8,$B$2:$B$8))>1))=0,COUNTIFS($B$2:$B$8,B2,$A$2:$A$8,"<>"&A2)=0) 但它的工作速度非常慢,因为等待了大约 4 个小时,它只完成了大约 20 万条数据的 28% 处理。

    我已将 csv 格式的文件上传到 R 上,并希望在 R 上执行相同的练习以加快处理速度。

    最佳答案

    试试 dplyr:

    require(dplyr)
    x$Col2 <- toupper(x$Col2) #make all letters same case.

    x_assigned <- x %>% group_by(Col2,Col1) %>%

    summarise(n = n()) %>% #counts the number of occurrences
    group_by(Col1) %>% arrange(desc(n)) %>% # arranges so that the highest count per Col1 is first
    mutate(assigned = if (first(n) == 1) { #this conditional statement will assign the 'correct' Col2 value to your Col1 value
    Col2
    } else if (first(n) > 1) {
    first(Col2)
    },
    test = assigned == Col2)

    x_assigned

    # A tibble: 6 x 5
    # Groups: Col1 [3]
    Col2 Col1 n assigned test
    <chr> <chr> <int> <chr> <lgl>
    1 A2B1 I-123 2 A2B1 T
    2 C2C2 I-456 2 C2C2 T
    3 D1E2 I-456 1 C2C2 F
    4 LJ87 I-789 1 LJ87 T
    5 LJ98 I-789 1 LJ98 T
    6 <NA> I-456 1 C2C2 NA

    为了获得所需的结果,您可以对 x 和 x_assigned 进行简单的左连接:
    left_join(x, x_assigned, by = c('Col1', 'Col2'))

    您可以通过这种方式查看缺失值的位置,还可以轻松分配“正确”的 Col2 值。抱歉,如果我误解了您的问题,我仍然不确定您如何将“正确”的 Col2 值分配给 Col1 值

    关于r - 检查每个具有相同唯一 ID 的唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48849294/

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