从逻辑测试创建数据帧

时间:2013-10-09 16:58:45

标签: r logical-operators

我知道这是一个非常简单的问题,但是我很难过,并且似乎缺乏词汇来搜索有效的搜索栏。

我的数据框中充满了与此类似的数字(虽然不属于同一类)

 Dat <- structure(c(9L, 9L, 3L, 3L, 2L, 9L, 10L, 5L, 6L, 2L, 4L, 6L, 
 10L, 2L, 9L, 0L, 1L, 8L, 9L, 7L, 7L, 4L, 4L, 3L, 4L, 7L, 7L, 
 1L, 0L, 3L, 6L, 10L, 8L, 3L, 0L, 7L, 7L, 1L, 2L, 8L, 5L, 7L, 
 7L, 8L, 2L, 1L, 10L, 3L, 0L, 2L, 7L, 0L, 0L, 7L, 9L, 8L, 9L, 
 0L, 4L, 4L, 5L, 6L, 6L, 2L, 4L, 1L, 6L, 2L, 4L, 7L, 5L, 2L, 7L, 
 4L, 8L, 3L, 3L, 2L, 5L, 1L, 1L, 3L, 8L, 0L, 1L, 8L, 8L, 1L, 1L, 
 0L, 4L, 4L, 4L, 5L, 6L, 9L, 5L, 2L, 6L, 3L), .Dim = c(10L, 10L
 ))

我想做的就是替换所有值&gt; 5带有1,所有值小于5带有0.我得到的帧为TRUE和FALSE,但似乎无法弄清楚如何更换东西。

 Datlog <- Dat > 5

非常感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:2)

如果我正确地阅读了您的问题,您将自己寻找答案:

(Dat > 5) * 1
R中的

TRUEFALSE分别等同于10。因此,更加语义正确的方法就是:

out <- as.numeric(Dat > 5)
dim(out) <- dim(Dat)

第二种方法需要采用两步法,因为当您使用as.numeric时,原始数据的dim会丢失。


使用不同值替换的一种方法是使用factor

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