混合(字符和数字)变量的逻辑查询

时间:2013-06-18 17:01:41

标签: string r list dataframe coercion

我不认为这会如此困难,但我已经挣扎了一段时间......我希望这很简单我想念:) 我需要能够逻辑地查询包含字符串和数字混合的变量的数据框。

LAMBDA<-data.frame(cbind(list(1,"lequiv"),list("lequiv",0)))
LAMBDA!=1

实现这一目标的最佳方法是什么,以便明显不等于1的字符串报告为FALSE,而不是NA? 感谢。

2 个答案:

答案 0 :(得分:4)

您可以尝试测试等于字符串“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(和警告消息)。

答案 1 :(得分:1)

我认为你在这里寻找因素。

如果查看str(LAMBDA),您会看到X1是一个包含两个元素的列表,一个存储为数字,一个存储为字符。

如果您改为按以下方式创建列表:

l1 <- data.frame(X1=c(1,"lequiv"),
                 X2=c("lequiv",2)
                  )

打印时看起来一样,但变量表示为因子。

然后l1==1给出:

        X1    X2
[1,]  TRUE FALSE
[2,] FALSE FALSE