这似乎是有史以来最愚蠢的问题,但我搞不清楚到底发生了什么..
我的数据如下:
test <- c("A", 1, 2)
out <- rep("ON", 3)
我想替换数值大于1的值(因此2应该是OFF
).
如果我这样做:
out[test > 1] <- "OFF"
out
我得到:
[1] "OFF" "ON" "OFF"
因为显然是"A" > 1 = TRUE
如果我这样做了
out[as.numeric(test > 1)] <- "OFF"
我得到:
[1] "OFF" "ON" "ON"
即使as.numeric(test > 1)
是:
[1] 1 0 1
as.numeric("A")
是NA
,NA > 1
是NA
.
获取这些值的正确方法是什么?
EDIT
因为我使用的函数在出现警告时会抛出错误,所以我try 将akrun和Dmitry的解决方案结合起来(因为该解决方案会抛出警告).
然而,出于某种原因:
test <- c("25", "38", "40", "38", "207", "16", "31", "18", "22", "20",
"3", "19", "4", "43", "20", "15", "21", "36", "36", "23", "33",
"31", "48")
grepl("^[0-9.]+$", test) & test < 10
是
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[20] FALSE FALSE FALSE FALSE