0

我知道我知道这是一个非常简单的问题,但我很困惑,似乎缺乏使用搜索栏有效寻找答案的词汇。

我有一个充满与此类似的数字的数据框(尽管不是同一类)

 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
 ))

我想要做的就是用 1 替换所有大于 5 的值,用 0 替换所有小于 5 的值。我已经得到了一个带有 TRUE 和 FALSE 的帧,但似乎无法弄清楚如何更换东西。

 Datlog <- Dat > 5

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

4

1 回答 1

2

如果我正确阅读了您的问题,您会为答案而自责:

(Dat > 5) * 1

TRUEFALSE在 R 中分别等于10。因此,在语义上更正确的方法是:

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

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


用不同值替换的一种方法是使用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
于 2013-10-09T17:00:54.397 回答