【问题标题】:Taking values from an 'answer key' dataframe based on matching 2 variables in 1 dataframe to the 'key' in the 'answer key' dataframe根据将 1 个数据框中的 2 个变量与“答案键”数据框中的“键”匹配,从“答案键”数据框中获取值
【发布时间】:2017-06-04 16:46:11
【问题描述】:

我想不出一种简洁或有效的表达方式,但这就是我想要做的......

我有以下几点:

  1. 带有列的感兴趣的数据框(以及其他):

$first_name:“唐纳德”、“巴拉克”、“乔治”、“比尔”、...

$last_name: "TRUMP", "OBAMA", "BUSH", "CLINTON", ...

和

  1. “答案键”数据框:

$name: "Donald John, TRUMP", "Barack Hussein, OBAMA", "Bill Jefferson, CLINTON", "George Walker, BUSH", ...

$值:0, 2, 4, 6, ...

我想要:

$first_name:“唐纳德”、“巴拉克”、“乔治”、“比尔”、...

$last_name: "TRUMP", "OBAMA", "BUSH", "CLINTON", ...

$值:0, 2, 4, 6, ...

需要注意的是:

  1. 没有办法从“答案关键”数据框中知道隐喻的中间名(没有目视检查数千列)。

  2. 名称排列不一样(与我的显示方式相反)。

  3. $first_name 和 $last_names 在感兴趣的数据帧中重复。

到目前为止

我已经设法让 $first_name 的格式与 $name 中的格式相同(也就是说,我现在有“Bill”和“CLINTON”,但我不知道如何将它们连接到“Bill Jefferson, CLINTON”)。我最初计划以某种方式使用 grep() 来匹配它们,但我认为这是不可能的,因为您似乎无法将向量用于“pattern =”。

这两个似乎相关,至少在概念上,但我只是画一个空白。

Create New Data Frame with Column Names from Unique Values in another Data Frame and Corresponding Values Assigned to Column

Define the value of a column in a dataframe based on 2 keys from a different dataframe

提前谢谢你。

【问题讨论】:

    标签: r dataframe merge


    【解决方案1】:

    我们从第二个数据集中提取子字符串,执行match 并使用它来获取“值”

    df1$value <- df2$value[match(do.call(paste, df1), toupper(sub("\\s+\\w+,", "", df2$name)))]
    df1
    #    first_name last_name value
    #1     DONALD     TRUMP     0
    #2     BARACK     OBAMA     2
    #3     GEORGE      BUSH     6
    #4       BILL   CLINTON     4
    

    数据

     df1 <- data.frame(first_name = c("DONALD", "BARACK", "GEORGE", "BILL"), 
      last_name = c("TRUMP", "OBAMA", "BUSH", "CLINTON"), stringsAsFactors=FALSE)
     df2 <- data.frame(name = c("Donald John, TRUMP", "Barack Hussein, OBAMA",
      "Bill Jefferson, CLINTON",
         "George Walker, BUSH"), value = c(0, 2, 4, 6) , stringsAsFactors=FALSE)
    

    【讨论】:

    • 你是一个圣人/巫师。谢谢。
    • @J.Diaz 我每天都花一些时间在编码上。如果你练习编码,你可能会变得很好。
    猜你喜欢
    • 2016-08-15
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    相关资源
    最近更新 更多