【问题标题】:find all columns in data.frame with non leading NA values查找 data.frame 中所有具有非前导 NA 值的列
【发布时间】:2021-06-20 22:57:21
【问题描述】:
             AA    AFGE
2015-09-30    NA 22.9170
2015-12-31    NA 23.1427
2016-03-31    NA 23.9825
2016-06-30    NA 24.6085
2016-09-30    NA 25.0717
2016-12-31 28.08 23.5920
2017-03-31 34.40 25.0819
2017-06-30 32.65 26.1776
2017-09-30 46.62 25.8541
2017-12-31 53.87 26.2200
2018-03-31 44.96 25.8608
2018-06-30 46.88 25.8300
2018-09-30 40.40 25.2347
2018-12-31 26.58 25.3200
2019-03-31 28.16 25.5000
2019-06-30 23.41 25.7900
2019-09-30 20.07 25.3400
2019-12-31 21.51 25.3600
2020-03-31  6.16      NA
2020-06-30 11.24      NA
2020-09-30 11.63 27.2300

我有一个包含 6000 列的数据框,其中大多数都有前导 NA 值,例如示例中的 AA。但我想找到所有具有非前导 NA 值(前导 NA 值或不那么重要)的列,请参阅 AFGE 和 2020-03-31 和 2020-06-30 行的 NA 值。

如果我可以获得所有列(名称)的非前导 NA 值,那就太好了,但如果我有一个数据框,其非前导 NA 值的 TRUE/FALSE 会更好。 因此,在这种情况下,除了第 2020-03-31 和 2020-06-30 行中 AFGE 的两个 NA 值之外,每个值的数据帧都将为 FALSE

【问题讨论】:

    标签: r dataframe tidyverse na


    【解决方案1】:

    你需要这样的东西吗?

    sapply(df, function(x) {
      with(rle(is.na(x)), rep(values & seq_along(values) != 1, lengths))
    })
    
    #         AA  AFGE
    # [1,] FALSE FALSE
    # [2,] FALSE FALSE
    # [3,] FALSE FALSE
    # [4,] FALSE FALSE
    # [5,] FALSE FALSE
    # [6,] FALSE FALSE
    # [7,] FALSE FALSE
    # [8,] FALSE FALSE
    # [9,] FALSE FALSE
    #[10,] FALSE FALSE
    #[11,] FALSE FALSE
    #[12,] FALSE FALSE
    #[13,] FALSE FALSE
    #[14,] FALSE FALSE
    #[15,] FALSE FALSE
    #[16,] FALSE FALSE
    #[17,] FALSE FALSE
    #[18,] FALSE FALSE
    #[19,] FALSE  TRUE
    #[20,] FALSE  TRUE
    #[21,] FALSE FALSE
    

    数据

    df <- structure(list(AA = c(NA, NA, NA, NA, NA, 28.08, 34.4, 32.65, 
    46.62, 53.87, 44.96, 46.88, 40.4, 26.58, 28.16, 23.41, 20.07, 
    21.51, 6.16, 11.24, 11.63), AFGE = c(22.917, 23.1427, 23.9825, 
    24.6085, 25.0717, 23.592, 25.0819, 26.1776, 25.8541, 26.22, 25.8608, 
    25.83, 25.2347, 25.32, 25.5, 25.79, 25.34, 25.36, NA, NA, 27.23
    )), class = "data.frame", row.names = c("2015-09-30", "2015-12-31", 
    "2016-03-31", "2016-06-30", "2016-09-30", "2016-12-31", "2017-03-31", 
    "2017-06-30", "2017-09-30", "2017-12-31", "2018-03-31", "2018-06-30", 
    "2018-09-30", "2018-12-31", "2019-03-31", "2019-06-30", "2019-09-30", 
    "2019-12-31", "2020-03-31", "2020-06-30", "2020-09-30"))
    

    【讨论】:

    • 几乎!还有一些列的第一项是 NA 并且有非领先的 NA,然后我想在这些列中也找到非领先的 NA。因此,在此示例中,如果您在 NA 中更改 AFGE(第一项)中的 22.917,我想在非前导列中找到 2 个 NA,现在我找不到这些列。
    • @gilberke 更新后的答案应该适用于这种情况。
    猜你喜欢
    • 2014-02-28
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-06
    相关资源
    最近更新 更多