【问题标题】:"Index Match" In R Studio (multiple columns, across rows)R Studio中的“索引匹配”(多列,跨行)
【发布时间】:2020-08-30 21:30:44
【问题描述】:

我正在处理一个相当大的数据集(10 万行),并希望在 R Studio 中复制 Excel 索引匹配函数。

我正在寻找一种方法来创建一个新列,该列将从现有列(“1995_Number”)中提取一个值,如果来自一年的三个不同列的 3 个值与来自另一年的三个列的三个值匹配 - 独立于行,并创建一个新列(“1994_Number”)。

以数据框为例:

dat <- data.frame(`1994_Address` = c("1234 Road", "123 Road", "321 Road"), `1994_ZipCode` = c(99999, 99999, 11111), `1994_Bank Name` = c("JPM", "JPM", "WF"), `1995_Address` = c("123 Road", "1234 Road", "321 Road"), `1995_ZipCode` = c(99999, 99999, 11111), `1995_Bank Name` = c("JPM", "JPM", "WF"), `1995_Number` = c(1, 2, 3), check.names = F, stringsAsFactors = F)

新创建的列 1994_Number 应该是 (2, 1, 3)

【问题讨论】:

    标签: r excel rstudio match matching


    【解决方案1】:

    一个可能的解决方案包括来自basematch 函数。与dplyr 一起工作如下:

    library(dplyr)
    dat <- data.frame(`1994_Adress` = c("1234 Road", "123 Road", "321 Road"),
                      `1994_ZipCode` = c(99999, 99999, 11111),
                      `1994_Bank Name` = c("JPM", "JPM", "WF"),
                      `1995_Adress` = c("123 Road", "1234 Road", "321 Road"),
                      `1995_ZipCode` = c(99999, 99999, 11111),
                      `1995_Bank Name` = c("JPM", "JPM", "WF"),
                      `1995_Number` = c(1, 2, 3), check.names = F, stringsAsFactors = F)
    dat %>%
      mutate(`1994_Number` = ifelse(`1994_Adress` %in% `1995_Adress` & 
                                      `1994_ZipCode` %in% `1995_ZipCode` &
                                      `1994_Bank Name` %in% `1995_Bank Name`, 
                                    dat[match(dat$`1994_Adress`, dat$`1995_Adress`), "1995_Number"], NA))
    
    #    1994_Adress 1994_ZipCode 1994_Bank Name 1995_Adress 1995_ZipCode 1995_Bank Name 1995_Number 1994_Number
    # 1   1234 Road        99999            JPM    123 Road        99999            JPM           1           2
    # 2    123 Road        99999            JPM   1234 Road        99999            JPM           2           1
    # 3    321 Road        11111             WF    321 Road        11111             WF           3           3
    

    【讨论】:

    • 遗憾的是,当我将代码应用于我自己的数据集时,它不起作用。错误:错误:“vec_dim”不是从“命名空间:vctrs”导出的对象
    • 也许像this issue 这样的东西会有所帮助?
    • 谢谢。我现在得到一个输出。但现在在我的数据集中,对于等效的“1994_Number”,类型是“”,在控制台中,每个值都显示“
    • 嗨@maxfrie。如果没有足够大的样本数据,这真的很难弄清楚。如果我运行代码我没有得到任何错误,它仍然是一个 df。介意提供更多数据吗?
    • 嘿@nico -- 在过去的几天里,我不得不把注意力集中在另一个项目上。是的,提供那将是惊人的。我该怎么做?我可以私下联系你吗?
    猜你喜欢
    • 2020-08-30
    • 1970-01-01
    • 2021-06-13
    • 2018-03-31
    • 2012-04-29
    • 2020-10-30
    • 2017-04-20
    • 1970-01-01
    • 2019-02-06
    相关资源
    最近更新 更多