获取在不存在的值之间缺少值的行

时间:2018-10-24 17:36:14

标签: r

我有一个很大的数据集,其中行代表案例,列代表月份。我正在寻找在没有缺失值的列之间具有缺失值的案例子集。

并非所有值都存在,因此可能会有一些我不想将其子集化的尾随或前导缺失值。例如,从以下数据集中:

ID    Month1    Month2    Month3    Month4    Month5    Month6    Month7
1     NA        NA        100       100       NA        200       300
2     300       300       300       400       500       NA        NA
3     150       150       NA        NA        150       150       150
4     NA        NA        NA        NA        NA        NA        100
5     NA        NA        NA        100       100       NA        NA

我只想将第一行和第三行子集化,因为它们在具有非缺失值的列之间缺少值。

ID    Month1    Month2    Month3    Month4    Month5    Month6    Month7
1     NA        NA        100       100       NA        200       300
3     150       150       NA        NA        150       150       150

有什么方法可以在R中执行此操作而不转换为长格式吗?

1 个答案:

答案 0 :(得分:0)

df[grep("\\d(NA)+\\d", apply(df[,2:8],1,paste0, collapse="")),]

结果:

  ID Month1 Month2 Month3 Month4 Month5 Month6 Month7
1  1     NA     NA    100    100     NA    200    300
3  3    150    150     NA     NA    150    150    150

apply为每一行创建一个Months列内容的字符串。然后grep查找数字中包含的NA(或多个NA)的情况。这给出了一个索引向量,该向量被传递给子集df