如何根据条件将列添加到数据框? (没有ifelse)

时间:2019-11-20 13:19:44

标签: r dataframe conditional-statements

我指的是奥斯卡·莱昂(Oscar deLéon)对这个问题的回答:How to add column into a dataframe based on condition?

这是他的代码:

iris$Regulation <- c("DOWN", "UP")[ (iris$Sepal.Length >= 5) + 1 ]

我知道它为“法规”列分配值,因此可以创建它(如果尚不存在)。但是之后?我看到它有效,但我不知道它到底在做什么。您能解释一下它的作用吗?

1 个答案:

答案 0 :(得分:1)

第一部分有效地创建了一个具有两个条目的对象:潜在结果DOWN/UP。第二个是索引其中一个结果的逻辑论证。

如果我们为结果创建一个对象,则可能会更容易:

outcome <- c('DOWN','UP')

方括号为对象编制索引:

> outcome[ 2 ]
[1] "UP"

方括号内是返回FALSE/TRUE的逻辑语句。仅关注前5个观察值:

> iris[1:5,'Sepal.Length'] >= 5
[1]  TRUE FALSE FALSE FALSE  TRUE

哪个数字存储为0/1

> as.numeric(iris[1:5,'Sepal.Length'] >= 5)
[1] 1 0 0 0 1

在上面加上1将返回1和2,它们在DOWN/UP对象中索引outcomes

> condition[ (iris[1:5,'Sepal.Length'] >= 5) + 1 ]
[1] "UP"   "DOWN" "DOWN" "DOWN" "UP"