结合if else语句和两个条件

时间:2020-08-28 12:57:26

标签: r dplyr

我有一个数据集,其中包含两列“代码”和“ Gross_i”。您可以在下面看到数据:

# Data
TABLE<-data.frame(Code=as.integer(c("1","2","3","4","5")),
                  Gross_i=as.integer(c("10","20","30","40","50")
                  ))

TAX_RATE1<-0.20
TAX_RATE2<-0.25

我的目的是将第二列“ Gross_i”乘以两个不同的税率。因此,我需要将前三个代码“ 1”,“ 2”和“ 3”乘以TAX_RATE1(20%)并观察“ 4” TAX_RATE2(25%)则为“ 5”。为此,我尝试使用以下代码行(如果不是其他陈述),但效果不好:

   pit_1=if_else(filter(Code %in% c("1","2","3")),Gross_i*TAX_RATE1,Gross_i*TAX_RATE2)

那么任何人都可以帮助解决这一行代码吗?

3 个答案:

答案 0 :(得分:1)

此方法对于字段中的dplyr可能有用:

library(dplyr)
#Code
TABLE %>% mutate(Value=if_else(Code %in% c("1","2","3"),Gross_i*TAX_RATE1,Gross_i*TAX_RATE2))

输出:

  Code Gross_i Value
1    1      10   2.0
2    2      20   4.0
3    3      30   6.0
4    4      40  10.0
5    5      50  12.5

答案 1 :(得分:1)

如果只有两种税率,则可以执行以下操作:

library(dplyr)

TABLE %>% mutate(pit_1 = Gross_i * c(TAX_RATE2, TAX_RATE1)[(Code %in% 1:3) + 1])

#  Code Gross_i pit_1
#1    1      10   2.0
#2    2      20   4.0
#3    3      30   6.0
#4    4      40  10.0
#5    5      50  12.5

如果您使用这样的费率,则很容易在case_when中指定条件:

TABLE %>%
  mutate(pit_1 = Gross_i * case_when(Code %in% 1:3 ~ TAX_RATE1,
                                     TRUE ~ TAX_RATE2))

答案 2 :(得分:0)

您尝试使用if_elseifelse转换为以下内容

pit_1 <- ifelse(TABLE$Code %in% c("1", "2", "3"), 
                yes = TABLE$Gross_i * TAX_RATE1, 
                no = TABLE$Gross_i * TAX_RATE2)