【问题标题】:R: - Why does head() return malformed output for columns with NAs?R: - 为什么 head() 会为带有 NA 的列返回格式错误的输出?
【发布时间】:2016-02-04 21:53:21
【问题描述】:

在使用 head() 检查数据帧并以某些列为条件时,我偶尔会感到困惑。包含一些 NA 的列会出现此问题。例如

df <- data.frame(A = rep(1:10, 10), B = c(NA, NA,  runif(98)))

这两个工作正常:

head(df)

head(df[df$A == 1,])

但是这个返回一个奇怪的输出:

head(df[df$B > 0.5,])

     A         B
NA   NA        NA
NA.1 NA        NA
4     4 0.6452069
5     5 0.5923567
6     6 0.7883836
10   10 0.5252390

如何省略这些行,哪些数字会用 NA 标记?还是有其他解决方法?

【问题讨论】:

  • 这不是head 的问题。这是您对df 进行子集化的方式。
  • df$B &gt;0.5 返回NA, NA, FALSE, TRUE, ...。根据?'['提取时,数字、逻辑或字符 NA 索引选择未知元素,因此在逻辑、整数、数字、复数或字符结果的相应元素中返回 NA,对于列表返回 NULL 。这就是为什么head 的前两行是“好奇”的。

标签: r dataframe


【解决方案1】:

只需从查询中删除这些行:

head(df[df$B > 0.5 & !is.na(df$B),])

    A         B
6   6 0.5233364
8   8 0.9972319
9   9 0.8092461
14  4 0.8309064
18  8 0.9985786
20 10 0.8305846

【讨论】:

    【解决方案2】:

    正如上面的答案所说,它是关于子集的。任何带有 NA 的子集都会产生类似的结果。只关注 df[1:4,]

    (df$B<0.5)[1:4] 
    

    结果

    NA  NA FALSE  TRUE
    

    然后

    df[1:4,][c(NA,NA,FALSE,TRUE),]
    

    结果

          A        B
    NA   NA       NA
    NA.1 NA       NA
    4     4 0.069598
    

    【讨论】:

    • 我看不出这个答案能提供什么更多。
    • 当我输入此内容时,koekenbakker 的评论不存在
    • 我说的是另一个答案。
    • 啊。好的。这让我很困惑。
    • 很抱歉造成混淆。
    【解决方案3】:

    我注意到使用 which() 也可以:

    head(df[which(df$B > 0.5),])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-22
      • 2021-07-20
      • 2019-01-01
      • 1970-01-01
      • 2022-01-20
      相关资源
      最近更新 更多