仅针对特定列的r子集数据帧
我想获取数据帧的一个子集,并在只有某些列是NA而不是其他列的情况下保留观察结果。例如:仅针对特定列的r子集数据帧,r,R,我想获取数据帧的一个子集,并在只有某些列是NA而不是其他列的情况下保留观察结果。例如: d <- data.frame(cat=c(1, 2, NA, NA), dog=c(3, 3, NA, 1), rabbit=c(.1, .2, .3, .4), python=c(3, 3, 3, 3)) d cat dog rabbit python 1 1.0 3.0 0.1 3.0 2 2.0 3.0 0.2 3.0 3 NA NA 0.3 3.0 4 NA 1
d <- data.frame(cat=c(1, 2, NA, NA), dog=c(3, 3, NA, 1), rabbit=c(.1, .2, .3, .4), python=c(3, 3, 3, 3))
d
cat dog rabbit python
1 1.0 3.0 0.1 3.0
2 2.0 3.0 0.2 3.0
3 NA NA 0.3 3.0
4 NA 1.0 0.4 3.0
但当我有很多功能时,这会很麻烦,例如,我有20个功能,我想要一个数据子集,其中只有4个是NAs。有没有比键入Is.na(功能省略)
和更优雅的方法呢!.na(featurekeeped)
是否为我想要的每个feature省略
和featurekeeped
?一旦我有了这些特定观察的数据帧,我如何删除我应用过滤器的NA列?我们可以试试
d[is.na(d$cat)&!rowSums(is.na(d[setdiff(names(d), "cat")])), , drop= FALSE]
# cat dog rabbit python
#4 NA 1 0.4 3
或者,我们可以将
Reduce
与一起使用,而不是行和
d[is.na(d$cat) & !Reduce(`|`, lapply(d[setdiff(names(d), "cat")], is.na)),, drop= FALSE]
一个紧凑的选择是
d[rowSums(is.na(d))==1 & is.na(d$cat),]
d[rowSums(is.na(d))==1 & is.na(d$cat),]