【问题标题】:How to merge two dataframes with conditional statements如何使用条件语句合并两个数据框
【发布时间】:2019-06-29 08:20:27
【问题描述】:

我有两个df 我想要merge

df1 看起来像这样:

CODE    TAX   PRICE   TOTAL
4577    0.9   99.1    100
8965    NA    25      25
7788    1.5   13.5    15
4021    NA    20      20
6987    0.00  40      40

df1 是一个dataframe,包含代码、取决于价格的税费以及税费+价格的总和(总和)。

df2 看起来像这样:

CODE    TAX.CLASS   MEANING
4577     CLASS1     Car
4577     CLASS2     Car
8965     CLASS1     Internet
2635     CLASS1     Computer
7788     CLASS1     Phone
7788     CLASS2     Phone
1258     CLASS1     Water
4021     CLASS1     Food
6987     CLASS1     Gasoline
6987     CLASS2     Gasoline

每个code 显示tax.classmeaning。 我想得到这样的输出:

CODE    MEANING   TAX.CLASS   TAX   PRICE   TOTAL
4577    Car        CLASS2     0.9   99.1    100
8965    Internet   CLASS1     NA    25      25
7788    Phone      CLASS2     1.5   13.5    15
4021    Food       CLASS1     NA    20      20
6987    Gasoline   CLASS1     0.00  40      40

到目前为止,我已经尝试过这些问题的答案:

但它没有按我的意愿工作。问题基本上是match df1 中的每个codedf2 中的code 但如果有NAdf1 <= 0.00 中的TAX 值,则检索CLASS1,另一方面手,如果在codes 上的df1 > 0.00 中有TAX 值重复两次,则检索CLASS2

有什么建议吗?

最好是BaseR

【问题讨论】:

  • 没有名为“值”的列。你指的是什么?
  • 我的意思是,TAX 的值在 df1

标签: r dataframe merge conditional


【解决方案1】:

你可以这样做:

df1$TAX.CLASS<- ifelse(is.na(df1$TAX) | df1$TAX <= 0.00, "CLASS1", "CLASS2")

df_final <- merge(df1, df2, by = c("CODE", "TAX.CLASS"), all.x = TRUE)

输出:

   CODE TAX.CLASS TAX PRICE TOTAL  MEANING
1: 4021    CLASS1  NA  20.0    20     Food
2: 4577    CLASS2 0.9  99.1   100      Car
3: 6987    CLASS1 0.0  40.0    40 Gasoline
4: 7788    CLASS2 1.5  13.5    15    Phone
5: 8965    CLASS1  NA  25.0    25 Internet

这是base 中的解决方案,但相同的逻辑可以应用于任何包。

请注意,您也可以在第一条语句中使用with 以避免引用数据框:

df1$TAX.CLASS<- with(df1, ifelse(is.na(TAX) | TAX <= 0.00, "CLASS1", "CLASS2"))

【讨论】:

    【解决方案2】:

    使用dplyr,我们可以在df1中创建TAX.CLASS,然后left_join

    df1 %>% dplyr::mutate(TAX.CLASS=ifelse(TAX<=0 | is.na(TAX),"CLASS1","CLASS2")) %>%
      dplyr::left_join(df2, by=c("CODE","TAX.CLASS"))
    
      CODE TAX PRICE TOTAL TAX.CLASS  MEANING
    1 4577 0.9  99.1   100    CLASS2      Car
    2 8965  NA  25.0    25    CLASS1 Internet
    3 7788 1.5  13.5    15    CLASS2    Phone
    4 4021  NA  20.0    20    CLASS1     Food
    5 6987 0.0  40.0    40    CLASS1 Gasoline
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-21
      • 1970-01-01
      • 2017-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多