Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如果列值与另一个向量中的值匹配,则设置标志_R - Fatal编程技术网

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