我有一个很大的数据集,其中行代表案例,列代表月份。我正在寻找在没有缺失值的列之间具有缺失值的案例子集。
并非所有值都存在,因此可能会有一些我不想将其子集化的尾随或前导缺失值。例如,从以下数据集中:
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中执行此操作而不转换为长格式吗?
答案 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
。