R 如果列值与另一个向量中的值匹配,则设置标志
假设我有一个R 如果列值与另一个向量中的值匹配,则设置标志,r,R,假设我有一个data.frame,如下所示: a <- data.frame(id=c(1,3,4,5,7,8,9,6,54,3,5,6,87,6)) 现在,我想在我的data.frame上创建一个新列flag,它应该位于1的id位于temp和0的其他位置。这就是我所尝试的: a$flag <- ifelse(a$id==temp, 1, 0) a$flag我想这就是你要找的。在如何制作数据框架时,有几个问题: a <- data.frame(id = c(1,3,4,5,
data.frame
,如下所示:
a <- data.frame(id=c(1,3,4,5,7,8,9,6,54,3,5,6,87,6))
现在,我想在我的data.frame上创建一个新列flag
,它应该位于1
的id
位于temp
和0
的其他位置。这就是我所尝试的:
a$flag <- ifelse(a$id==temp, 1, 0)
a$flag我想这就是你要找的。在如何制作数据框架时,有几个问题:
a <- data.frame(id = c(1,3,4,5,7,8,9,6,54,3,5,6,87,6),
flag = 0)
我更喜欢演示非ifelse
解决方案,因为我发现这种结构很难概括复杂的情况。Perfecto!我不知道为什么ifelse不工作。非常感谢@carlwhyte,尝试运行$id==temp
并尝试了解发生了什么(包括警告消息)。提示:由于temp
与a$id
的长度不同,它会被循环使用。或者a$flag另一个选项:内(a,flag为.numeric
以给出OP的预期输出。但就我个人而言,我会放弃它,只存储TRUE/FALSE
作为“flag”。它也使用更少的内存。+1,欢迎使用。然而,这似乎是一个非常基本的问题。我建议您在发布之前搜索。ifelse
由于向量长度不同而无法循环使用。为什么要隐式转换?人们建议将转换为.numeric
。这是一个有效的批评。“”操作将执行强制。击键次数更少,但可能不会更快,因为将创建一个额外的向量并进行计算。我认为理解R隐式类型转换可能会有所帮助。
a <- data.frame(id = c(1,3,4,5,7,8,9,6,54,3,5,6,87,6),
flag = 0)
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
a$flag <- 0 + (a$id %in% temp )
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