R 从逻辑测试创建数据帧

R 从逻辑测试创建数据帧,r,logical-operators,R,Logical Operators,我知道这是一个非常简单的问题,但我被难住了,似乎缺乏词汇,无法通过搜索栏有效地找到答案 我有一个充满类似数字的数据框(虽然不是同一类) Dat 5带1,所有小于5的值带0。我已经得到了一个包含真与假的框架,但似乎不知道如何替换这些东西 Datlog <- Dat > 5 Datlog 5 任何帮助都将不胜感激。谢谢。如果我没看错你的问题,你会为答案感到惊讶的: (Dat > 5) * 1 R中的TRUE和FALSE分别等于1和0。因此,语义上更正确的方法是: out &

我知道这是一个非常简单的问题,但我被难住了,似乎缺乏词汇,无法通过搜索栏有效地找到答案

我有一个充满类似数字的数据框(虽然不是同一类)

Dat 5带1,所有小于5的值带0。我已经得到了一个包含真与假的框架,但似乎不知道如何替换这些东西

 Datlog <- Dat > 5
Datlog 5

任何帮助都将不胜感激。谢谢。

如果我没看错你的问题,你会为答案感到惊讶的:

(Dat > 5) * 1
R中的
TRUE
FALSE
分别等于
1
0
。因此,语义上更正确的方法是:

out <- as.numeric(Dat > 5)
dim(out) <- dim(Dat)
另一种方法是基本子集和替换:

out <- Dat
out[out > 5] <- 999
out[out <= 5] <- 0
out

out 5]你是说像
(Dat>5)*1
?上帝,这太荒谬了。是的,这似乎奏效了。你能解释一下原因/方式吗?啊,我明白,所以1*1给我一个1,0*1给0。如果我想要的不是1或0怎么办?@user2510207,仍然只是两个范围?你能举个例子说明你想用什么来代替它们吗?上面已经讲过了。这非常有帮助,谢谢!第三种方法是将0/1值增加1,并将其用作字符向量的索引:
c(“低”、“高”)[1+(out>5)]
out <- factor((Dat > 5), c(TRUE, FALSE), c("YES", "NO"))
dim(out) <- dim(Dat)
out <- Dat
out[out > 5] <- 999
out[out <= 5] <- 0
out