如果列值与另一个向量中的值匹配,则设置标志

时间:2013-07-01 23:06:42

标签: r

假设我有data.frame如下:

a <- data.frame(id=c(1,3,4,5,7,8,9,6,54,3,5,6,87,6))

我有一个向量temp如下:

temp<-c(1,3,5,9)

现在,我想在我的data.frame上创建一个新列flag,其中1位于id temp和{{1}其他地方。这就是我试过的:

0

,所需的输出应为a$flag <- ifelse(a$id==temp, 1, 0)

但是从我上面的代码中,(1,1,0,1,0,0,1,0,0,1,1,0,0,0)未正确更新。我在这里错过了什么? 可以/应该使用flag吗?如果是这样,怎么样?

感谢您的帮助

2 个答案:

答案 0 :(得分:4)

我认为这就是你要找的东西。您如何制作data.frame

有几个问题
a <- data.frame(id = c(1,3,4,5,7,8,9,6,54,3,5,6,87,6),
                flag = 0)

然后,要将flag的值id更新为temp,您可以使用[和逻辑测试%in%对这些值进行索引,并指定他们1

a$flag[a$id %in% temp] <- 1

a
#    id flag
# 1   1    1
# 2   3    1
# 3   4    0
# 4   5    1
# 5   7    0
# 6   8    0
# 7   9    1
# 8   6    0
# 9  54    0
# 10  3    1
# 11  5    1
# 12  6    0
# 13 87    0
# 14  6    0

答案 1 :(得分:1)

a$flag <- 0 + (a$id %in% temp )

ifelse失败的唯一原因是,当逻辑测试应为%in%时,使用“==”。

 a<- data.frame(id=c(1,3,4,5,7,8,9,6,54,3,5,6,87,6))
temp<-c(1,3,5,9)

a$flag <- ifelse(a$id %in% temp, 1, 0)

> a
   id flag
1   1    1
2   3    1
3   4    0
4   5    1
5   7    0
6   8    0
7   9    1
8   6    0
9  54    0
10  3    1
11  5    1
12  6    0
13 87    0
14  6    0

我更喜欢演示非ifelse解决方案,因为我发现该构造对于模式复杂情况的概括性很差。