2017-05-04 103 views
0

我subseting我的数据,以及我以下的代码获得不同的结果:不同的结果为R 2的子集数据的方法

subset(df, x==1) 
df[df$x==1,] 

x的类型是integer

上午我做错了什么? 谢谢您提前

+0

你是对的,'x'有2种类型的值:1或NA ..(我忘了提及它)..但为什么会发生? (使用'子集'的结果是好的) – staove7

回答

5

没有示例数据,很难说你的问题是什么。然而,我的直觉是,下面可能解释您的问题:与[

df[df$quantity == 2,] 
quantity  item 
     2 Americano 
     NA  <NA> 

现在

df <- data.frame(quantity=c(1:3, NA), item=c("Coffee", "Americano", "Espresso", "Decaf")) 
df 
quantity  item 
     1 Coffee 
     2 Americano 
     3 Espresso 
     NA  Decaf 

让我们的子集,让我们与subset子集:

subset(df, quantity == 2) 
quantity  item 
     2 Americano 

我们看到,有一个子设置输出的差异取决于如何处理值NA。我认为这一点如下:使用subset,您明确声明您希望条件为的子集可验证地为真。 df$quantity==2会生成一个真/假陈述的向量,但如果数量缺失,则不可能分配TRUEFALSE。这就是为什么我们得到与NA以下输出结尾:

df$quantity==2 
[1] FALSE TRUE FALSE NA 

功能[借此载体,但不知道做什么用NA,这是不是NA Decaf我们为什么NA <NA>。如果你喜欢使用[,您可以使用以下代替:

df[which(df$quantity == 2),] 
quantity  item 
     2 Americano 

这意味着逻辑条件df$quantity == 2为载体或行号,其中的逻辑条件是“可核查”满意。

+0

正如我在上面的评论中写道的..你是对的。你能说出这种差异的原因是什么? TKS! – staove7

+2

我已经添加了一个小记录到我的答案,这可能有助于记住哪一个是哪个。我认为这更多的是在'base R'中的一个约定,尽管我们在附加包中看到了例如。 'dplyr :: filter','NA's也被排除在外。实际上,我认为会议是有帮助的,因为它能让我在脚趾上寻找缺失的价值,但最终这是一个品味的问题,我会假设。 – coffeinjunky

相关问题