这似乎是有史以来最愚蠢的问题,但我搞不清楚到底发生了什么..

我的数据如下:

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")NANA > 1NA.

获取这些值的正确方法是什么?

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

推荐答案

test <- c("A", 1, 2)    
out <- rep("ON", 3)
idx <- as.numeric(test) > 1
is.na(idx) <- FALSE
out[idx] <- 'OFF'
out
[1] "ON"  "ON" "OFF" 

R相关问答推荐

R中的枢轴/转置

使用R中的gt对R中的html rmarkdown文件进行条件格式设置表的单元格

使用case_match()和char数组重新编码值

为什么我的基准测试会随着样本量的增加而出现一些波动?

如何在PackageStatus()中列出&q;不可用的包&q;?

基于数据集属性将科分配给物种

按列中显示的配对组估算NA值

我将工作代码重构为一个函数--现在我想不出如何传递轴列参数

将统计检验添加到GGPUBR中的盒图,在R

Rmarkdown::Render vs Source()

快速合并R内的值

我需要使用ggplot2制作堆叠条形图

如何从嵌套数据中自动创建命名对象?在R中

注释不会绘制在所有ggplot2面上

使用同一行中的前一个值填充R矩阵中的缺失值

在GT()中的列之间添加空格

了解nchar在列表上的意外行为

移除y轴断开的geom_bar图的外框

如何计算物种矩阵中一行中的唯一个数?

有没有一种方法可以用非标准参数编写一个定制的ggploy主题函数?