假设我有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
吗?如果是这样,怎么样?
感谢您的帮助
答案 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
解决方案,因为我发现该构造对于模式复杂情况的概括性很差。