如何从包含至少一个 NaN 的 R 数据框中删除行?
NA值和NaN值本质上非常不同,因此,删除包含NA值的行与删除包含NaN值的行不同。例如,如果我们有一个包含NaN值的数据框,将使用is.finite以下示例中所示的函数删除行。
考虑以下数据框-
示例
x1<-sample(c(NaN,rpois(4,5)),20,replace=TRUE) x2<-sample(c(NaN,rpois(4,5)),20,replace=TRUE) df1<-data.frame(x1,x2) df1输出结果
x1 x2 1 2 2 2 2 3 3 0 6 4 2 3 5 2 2 6 8 NaN 7 2 3 8 8 NaN 9 2 2 10 NaN 2 11 2 2 12 NaN 6 13 8 6 14 NaN 3 15 NaN 6 16 NaN NaN 17 8 NaN 18 8 2 19 NaN 3 20 NaN 3
从df1中删除包含NaN值的行-
df1[is.finite(df1$x1)&is.finite(df1$x2),]
x1 x2 1 2 2 2 2 3 3 0 6 4 2 3 5 2 2 7 2 3 9 2 2 11 2 2 13 8 6 18 8 2
示例
y1<-sample(c(NaN,rnorm(2)),20,replace=TRUE) y2<-sample(c(NaN,rnorm(2)),20,replace=TRUE) y3<-sample(c(NaN,rnorm(2)),20,replace=TRUE) df2<-data.frame(y1,y2,y3) df2输出结果
y1 y2 y3 1 NaN 0.3324506 -0.5461648 2 0.3319275 -0.3103766 -0.5461648 3 1.5624962 0.3324506 -0.3322423 4 NaN -0.3103766 -0.3322423 5 1.5624962 NaN NaN 6 NaN -0.3103766 -0.3322423 7 1.5624962 0.3324506 NaN 8 0.3319275 -0.3103766 -0.3322423 9 NaN -0.3103766 -0.3322423 10 1.5624962 NaN NaN 11 0.3319275 NaN NaN 12 1.5624962 0.3324506 -0.3322423 13 1.5624962 NaN NaN 14 NaN 0.3324506 NaN 15 1.5624962 0.3324506 -0.5461648 16 1.5624962 -0.3103766 -0.3322423 17 NaN 0.3324506 -0.5461648 18 NaN 0.3324506 -0.3322423 19 0.3319275 -0.3103766 -0.5461648 20 0.3319275 NaN -0.3322423
从df2中删除包含NaN值的行-
df2[is.finite(df2$y1)&is.finite(df2$y2)&is.finite(df2$y3),]
y1 y2 y3 2 0.3319275 -0.3103766 -0.5461648 3 1.5624962 0.3324506 -0.3322423 8 0.3319275 -0.3103766 -0.3322423 12 1.5624962 0.3324506 -0.3322423 15 1.5624962 0.3324506 -0.5461648 16 1.5624962 -0.3103766 -0.3322423 19 0.3319275 -0.3103766 -0.5461648