如果在r中使用%in%

时间:2015-02-19 06:56:54

标签: r if-statement dplyr

让我们假设我的第一个数据集是iris

 data(iris)
 head(iris)

   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
   5.1         3.5          1.4         0.2  setosa
   4.9         3.0          1.4         0.2  setosa
   4.7         3.2          1.3         0.2  setosa
   4.6         3.1          1.5         0.2  setosa
   5.0         3.6          1.4         0.2  setosa
   5.4         3.9          1.7         0.4  setosa

我的第二个数据集包含一个列类型,如下所示

   type
   setosa
   veranica
   Big Rosa
   virginica

我正在尝试在iris数据集中生成第六列,其值为Yes和No,如果iris $ Species == 2ndDataset $中的值为no,则为Yes。

我对使用%in%选项执行此操作感兴趣。我试过但失败了,这就是我到目前为止所做的事情

  iris[(as.character(iris$Species ) %in% as.character(2ndDataset$type)) ,  Result = 1, Result = 0]

需要帮助。

1 个答案:

答案 0 :(得分:0)

如果要以有序方式检查相等性(即,如果向量类型的元素i与向量种类中的元素i相同),则不能使用%in%,因为它检查是否载体类型的元素i包含在载体种类的任何地方。

我可以想到两种方法来做你想要的事情:

# Generates dummy data
data(iris)
iris2 = iris
iris = cbind(iris, Values = NA)
# Creates a difference between iris2$Species (type) and iris$Species
iris2$Species[1] = "virginica"

第一种方式(没有ifelse):

iris$Values = as.character(iris$Species) == as.character(iris2$Species)
iris$Values[iris$Values == TRUE] = "Yes"
iris$Values[iris$Values == FALSE] = "No"

第二种方式(更快):

iris$Values = ifelse(as.character(iris$Species) == as.character(iris2$Species), "Yes", "No")