Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何使用条件语句合并两个数据帧_R_Dataframe_Merge_Conditional - Fatal编程技术网

R 如何使用条件语句合并两个数据帧

R 如何使用条件语句合并两个数据帧,r,dataframe,merge,conditional,R,Dataframe,Merge,Conditional,我有两个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 CODE TAX.CLASS MEANING 4577 CLASS1 Car 4577 CLASS2

我有两个
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
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    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
df1
是一个
dataframe
包含代码、取决于价格的税收成本以及税收+价格的总和

df2
如下所示:

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
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    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
其中每个
code
显示一个
tax.class
含义
。 我希望得到如下输出:

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
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    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
到目前为止,我已经尝试了以下问题的答案:

但它并没有像我想要的那样起作用。基本上,问题是将
df1
中的
每一个
代码
df2
中的
代码
进行匹配,但如果
代码
上的
df1 0.00
中存在
NA
税务
值,则检索
CLASS1
重复两次

有什么建议吗

最好是
BaseR

您可以:

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)
这是
base
中的解决方案,但相同的逻辑可以应用于任何包中

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

df1$TAX.CLASS<- with(df1, ifelse(is.na(TAX) | TAX <= 0.00, "CLASS1", "CLASS2"))
df1$TAX.CLASS您可以执行以下操作:

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)
这是
base
中的解决方案,但相同的逻辑可以应用于任何包中

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

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

df1$TAX.CLASS使用
dplyr
,我们可以在
df1
中创建一个TAX.CLASS,然后
left\u 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
df1%>%dplyr::mutate(TAX.CLASS=ifelse(TAX%)
dplyr::left_join(df2,by=c(“CODE”,“TAX.CLASS”))
代码税价格总税.CLASS含义
14577 0.9 99.1 100二级车
28965 NA 25.0 25 CLASS1互联网
37788 1.513.515 2类电话
44021 NA 20.0 20类食品
56987 0.040.040一级汽油

使用
dplyr
,我们可以在
df1
中创建一个TAX.CLASS,然后
left\u 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
df1%>%dplyr::mutate(TAX.CLASS=ifelse(TAX%)
dplyr::left_join(df2,by=c(“CODE”,“TAX.CLASS”))
代码税价格总税.CLASS含义
14577 0.9 99.1 100二级车
28965 NA 25.0 25 CLASS1互联网
37788 1.513.515 2类电话
44021 NA 20.0 20类食品
56987 0.040.040一级汽油

没有“值”列。你指的是什么?我是说,
df1
中的
TAX
值。没有“值”列。你指的是什么?我是说,
df1
中的
TAX
值。