我有以下数据框:
> ddf = data.frame(name=c('a','b'), value=c(10,20))
> ddf
name value
1 a 10
2 b 20
我尝试使用以下命令从ddf获取xx:
> xx = ddf[ddf$name=='a','value']
> xx
[1] 10
> xx = ddf[ddf$name=='c','value']
> xx
numeric(0)
如何测试xx是否为有效数字而不是'数字(0)'。我试过以下:
> is.numeric(xx)
[1] TRUE
> is.na(xx)
logical(0)
> is.null(xx)
[1] FALSE
> is.logical(xx)
[1] FALSE
我必须从不同的xx = ddf[ddf$name=='a', 'value']
数据框中询问ddf
。有时ddf
不包含'a'
,因此不会返回任何值。我想发现这个。
答案 0 :(得分:9)
使用基数R执行此操作的最简单方法是检查xx
的长度。
if(length(xx)>0)
{
<do something>
}
如果要检查变量是否也是数字,请使用is.numeric
if (length(xx)>0 & is.numeric(xx))
例如,举个例子:
xx <- ddf[ddf$name=='a','value']
is.numeric(xx) & length(xx)>0
[1] TRUE
xx <- ddf[ddf$name=='c','value']
is.numeric(xx) & length(xx)>0
[1] FALSE
xx <- ddf[ddf$name=='a','name']
is.numeric(xx) & length(xx)>0
[1] FALSE
答案 1 :(得分:6)
library(assertive)
is_a_number(xx) # returns TRUE or FALSE
assert_is_a_number(xx) # throws an error if not TRUE
这结合了两个测试。首先,它检查xx
是否具有类numeric
(integer
也可以,因为基础检查由is.numeric
完成),其次它检查xx
的长度1}}是一个。
答案 2 :(得分:4)
以下代码使用正则表达式确认字符串on包含数字并且至少有一位数字。见下文:
ComparableAndLessThan
或者如果你需要处理负数和小数位:
grepl("^[0-9]{1,}$", xx)
答案 3 :(得分:-1)
这样的事情怎么样,您只需在过滤后检查结果行的数量?
library(tidyverse)
ddf = data.frame(name=c('a','b'), value=c(10,20))
t <- ddf %>% filter(name == "c")
nrow(t) == 0
[1] TRUE