我不认为这会那么困难,但我已经挣扎了一段时间......我希望这是我所缺少的简单的东西:) 我需要能够在逻辑上查询包含混合字符串的变量的数据框和数字。
LAMBDA<-data.frame(cbind(list(1,"lequiv"),list("lequiv",0)))
LAMBDA!=1
实现这一点的最佳方法是什么,以便将明显不等于 1 的字符串报告为 FALSE,而不是 NA?谢谢。
您可以尝试测试等于字符串“1”的元素,而不是测试等于数字 1 的元素。例如:
> LAMBDA!="1"
X1 X2
[1,] FALSE TRUE
[2,] TRUE TRUE
然而:
> LAMBDA!=1
X1 X2
[1,] FALSE NA
[2,] NA TRUE
在第一种情况下,R 足够聪明,可以在测试等价之前将数据框中的值 1 强制为字符串。在第二种情况下,它不能将“lequiv”强制转换为测试等效性之前的数字,因此返回 NA (和警告消息)。
我想你在这里寻找因素。
如果您看一下,str(LAMBDA)
您会发现这X1
是一个包含两个元素的列表,一个存储为数字,一个存储为字符。
如果您改为按如下方式创建列表:
l1 <- data.frame(X1=c(1,"lequiv"),
X2=c("lequiv",2)
)
打印时看起来一样,但变量表示为因子。
然后l1==1
给出:
X1 X2
[1,] TRUE FALSE
[2,] FALSE FALSE