R中2个子集数据方法的不同结果

sta*_*ve7 0 r subset

我正在下载我的数据,并且我得到以下代码的不同结果:

subset(df, x==1)
df[df$x==1,]
Run Code Online (Sandbox Code Playgroud)

x的类型是 integer

难道我做错了什么?先感谢您

cof*_*nky 5

没有示例数据,很难说出你的问题是什么.但是,我的预感是以下可能解释了您的问题:

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
Run Code Online (Sandbox Code Playgroud)

让我们的子集 [

df[df$quantity == 2,]
 quantity      item
        2 Americano
       NA      <NA>
Run Code Online (Sandbox Code Playgroud)

现在让我们的子集subset:

subset(df, quantity == 2)
quantity      item
       2 Americano
Run Code Online (Sandbox Code Playgroud)

我们看到子设置输出存在差异,具体取决于NA值的处理方式.我想到如下:有了subset,你明确地说明你想要条件可验证为真的子集.df$quantity==2生成一个真/假语句的向量,但是如果缺少数量,则无法分配TRUEFALSE.这就是为什么我们得到以下输出结尾的NA:

df$quantity==2
[1] FALSE  TRUE FALSE    NA
Run Code Online (Sandbox Code Playgroud)

该函数[采用此向量但不明白该怎么做NA,这就是为什么而不是NA Decaf我们得到的NA <NA>.如果您更喜欢使用[,可以使用以下代码:

df[which(df$quantity == 2),]
quantity      item
       2 Americano
Run Code Online (Sandbox Code Playgroud)

这将逻辑条件df$quantity == 2转换为向量或行号,其中逻辑条件"可验证地"满足.

  • 我在回答中添加了一个小注释,这可能有助于记住哪一个是哪个.我认为它更像是基础R`中的一个约定,尽管我们看到在附加软件包中,例如``dplyr :: filter`,`NA`s也被排除在外.我实际上认为这个惯例是有帮助的,因为它让我保持警惕,寻找缺失的价值观,但最终这是一个品味问题,我猜想. (2认同)