首页 > 解决方案 > R中的条件嵌套IF

问题描述

我有一列包含以下一些值:0 到 6 每个值都指帐户类型,无论是收入、费用等

我正在尝试使用 IF 来查找该值并为其分配正确的分类。

我尝试了以下方法,但没有奏效。

account_type <- if(df$class = 0) {
  account_type = 'Suspense'
} else if (df$class = 1) {
  account_type = 'Asset'
}

我很感激你的帮助。如果您结合解释,我也将不胜感激。

谢谢,

标签: rif-statementconditional-statements

解决方案


我想更可取的 R-ish 方式来做你想做的事情是使用查找表

首先,我创建了一个可重现的示例

set.seed(68826333)

(
    dat <- data.frame(
        account = sample(1:4, 10, TRUE),
        value   = rnorm(10)
    )
)

#   account       value
#1        2  1.17913936
#2        1 -1.40654534
#3        3 -2.46079924
#4        1 -0.20670095
#5        1 -1.29534910
#6        1  0.80030380
#7        4  0.37431903
#8        4 -0.07338782
#9        1 -0.50872642
#10       4 -0.15198686

然后我创建一个查找表

(
    lookup <- c('1' = 'Asset', '2' = 'Suspense', '3' = 'Revenue', '4' = 'Expense')
)

#         1          2          3          4 
#   "Asset" "Suspense"  "Revenue"  "Expense" 

在我的查找表中,向量的名称对应于account变量 from的值dat

现在,每当您想将数字数据从account变量映射到帐户类型时,您只需进行简单的子集化和重新分配:

dat$account <- lookup[as.character(dat$account)]

#dat
#    account       value
#1  Suspense  1.17913936
#2     Asset -1.40654534
#3   Revenue -2.46079924
#4     Asset -0.20670095
#5     Asset -1.29534910
#6     Asset  0.80030380
#7   Expense  0.37431903
#8   Expense -0.07338782
#9     Asset -0.50872642
#10  Expense -0.15198686

推荐阅读