如何在没有NA值的data.frame中选择行

Sum*_*mit 8 r dataframe

我有一个叫做数据的数据框.我想创建一个函数f(data,collist).此函数从数据本身获取数据和列列表,并仅返回数据中的那些行,其中collist中提到的列名称不是NA.我知道它可以使用for循环完成,但我想在不使用for循环的情况下完成它.

另外,如果R中通常更有效,以避免循环,请告诉我.

这是一个例子:

 A   B   C   D
 1   2  NA  NA
 2  NA  NA  NA
NA   3   7   5
NA   4   2  NA
 5   6  NA  NA
Run Code Online (Sandbox Code Playgroud)

如果collist包含B和C,则将返回行号为1,3,4的简化数据帧.原因是B或C或两者在第2行和第5行都有NA.我想要一个函数,因为我将使用这个操作很多次.通过这个问题,我将学习一些新的R技巧,以及让我的整个程序更优雅.谢谢.

A5C*_*2T1 8

听起来你只是在寻找complete.cases.这是一个例子:

#### SAMPLE DATA

set.seed(1)
m <- matrix(rnorm(20), 5)
m[sample(length(m), 7)] <- NA
mydf <- data.frame(m)
mydf
#           X1         X2        X3          X4
# 1         NA -0.8204684  1.511781 -0.04493361
# 2  0.1836433  0.4874291        NA          NA
# 3 -0.8356286  0.7383247        NA  0.94383621
# 4  1.5952808         NA -2.214700  0.82122120
# 5  0.3295078         NA        NA  0.59390132

#### SAMPLE EXTRACTION

collist <- c("X1", "X2")
mydf[complete.cases(mydf[collist]), collist]
#           X1        X2
# 2  0.1836433 0.4874291
# 3 -0.8356286 0.7383247
Run Code Online (Sandbox Code Playgroud)