Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在没有NA值的data.frame中选择行_R_Dataframe - Fatal编程技术网

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

如何在没有NA值的data.frame中选择行,r,dataframe,R,Dataframe,我有一个叫做数据的数据框。我想创建一个函数fdata,collist。此函数从数据本身获取数据和列列表,并仅返回数据中的行,collist中提到的列名不适用于这些行。我知道它可以用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 #### SAMPLE DAT

我有一个叫做数据的数据框。我想创建一个函数fdata,collist。此函数从数据本身获取数据和列列表,并仅返回数据中的行,collist中提到的列名不适用于这些行。我知道它可以用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
#### 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

如果collist包含B和C,那么将返回行号为1,3,4的缩减数据帧。原因是B或C或两者在第2行和第5行中都有NA。我想要一个函数,因为我会多次使用这个操作。通过这个问题,我将学习一些新的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
#### 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

对不起,如果我不够清楚。我只想返回那些行作为数据帧,collist中提到的所有列都是非NA的。在KDB/Q中,我可以传递索引,因为我认为传递索引编号比传递完整的子集数据更有效,然后使用这些索引,我可以轻松地从KDB/Q中的主数据中选择这些索引。不确定在R中什么是最优化的-发送索引还是发送子集数据。如果是索引,如何使用该索引从主函数中的数据提取行?谢谢!这就是我要找的。假设我不删除NA,而是删除Inf或任何数据小于0的位置,该怎么办。我该怎么做?可能是@Sumit的复制品,你想在这些情况下保留NA吗?这是一个完全不同的问题,但如果你这样搜索,我相信你会找到一些例子,说明如何做到这一点。请记住,比较运算符通常会产生真输出和假输出,这些输出可用于对数据进行子集划分。您的答案部分回答了我的问题。我想要所有列x1、x2、x3、x4以及示例中给出的第2行和第3行。@Sumit,然后把你的问题写得更清楚。只需删除最后一行中的第二个collist。如果您不明白这是在做什么,那么您需要先阅读基本子集和从R中提取数据,然后才能进一步了解R。我知道答案了。mydf[complete.casesmydf[collist],]就可以了。