Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.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
R 检查数据帧中的所有值是否满足条件(条件为矢量)_R_Matrix - Fatal编程技术网

R 检查数据帧中的所有值是否满足条件(条件为矢量)

R 检查数据帧中的所有值是否满足条件(条件为矢量),r,matrix,R,Matrix,我有一个数据框,如下所示: muestra[1:10,2:5] ## X0 X1 X2 X3 ## 21129 0 0 0 0 ## 34632 0 0 0 0 ## 30612 0 0 0 0 ## 10687 0 0 1 2 ## 44815 0 0 0 1 ## 40552 0 0 0 1 ## 15311 0 0 0 0 ## 33960 0 0 0 0 ## 24073 0 0 0 0 ## 13077

我有一个数据框,如下所示:

muestra[1:10,2:5]
##       X0 X1 X2 X3
## 21129  0  0  0  0
## 34632  0  0  0  0
## 30612  0  0  0  0
## 10687  0  0  1  2
## 44815  0  0  0  1
## 40552  0  0  0  1
## 15311  0  0  0  0
## 33960  0  0  0  0
## 24073  0  0  0  0
## 13077  0  0  0  0
我正在比较特定向量值的行:

muestra[1:10,2:5] == c(0,0,0,0)
##         X0   X1    X2    X3
## 21129 TRUE TRUE  TRUE  TRUE
## 34632 TRUE TRUE  TRUE  TRUE
## 30612 TRUE TRUE  TRUE  TRUE
## 10687 TRUE TRUE FALSE FALSE
## 44815 TRUE TRUE  TRUE FALSE
## 40552 TRUE TRUE  TRUE FALSE
## 15311 TRUE TRUE  TRUE  TRUE
## 33960 TRUE TRUE  TRUE  TRUE
## 24073 TRUE TRUE  TRUE  TRUE
## 13077 TRUE TRUE  TRUE  TRUE
Comparison向量的值可能会更改;i、 e.它可以是
c(0,0,1,0)
c(1,2,1,2)
,等等

我想检查整行是否符合条件;是否有一个函数返回如下内容:

some_function(muestra[1:10,2:5], c(0,0,0,0))
##        some_function(muestra[1:10,2:5], c(0,0,0,0))
## 21129                                       TRUE
## 34632                                       TRUE
## 30612                                       TRUE
## 10687                                      FALSE
## 44815                                      FALSE
## 40552                                      FALSE
## 15311                                       TRUE
## 33960                                       TRUE
## 24073                                       TRUE
## 13077                                       TRUE

您正在查找
all()
。对每行应用
all()


让我们考虑一个更一般的目标向量,比如<代码> y> p>你正在寻找<代码>()/<代码>。对每行应用

all()


让我们考虑一个更一般的目标向量,比如<代码> y> p>原谅我不喜欢行操作。我会将

col
rowSums
组合

rowSums(df == c(0,0,0,0)[col(df)]) == ncol(df)
# 21129 34632 30612 10687 44815 40552 15311 33960 24073 13077 
#  TRUE  TRUE  TRUE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE 

一些基准

set.seed(123)
df <- as.data.frame(matrix(sample(1e7), ncol = 10)) 
vec <- sample(10)

library(microbenchmark)
microbenchmark("ZL: " = apply(df== vec, 1, all),
               "DA: " = rowSums(df == vec[col(df)]) == ncol(df))

# Unit: milliseconds
# expr      min        lq      mean    median        uq      max neval cld
# ZL:  2262.580 2386.5286 2421.7244 2420.6767 2454.1483 2592.888   100   b
# DA:   786.121  807.1531  836.7408  827.1577  849.9955 1038.139   100  a 
set.seed(123)

对不起,我不喜欢按行操作。我会将
col
rowSums
组合

rowSums(df == c(0,0,0,0)[col(df)]) == ncol(df)
# 21129 34632 30612 10687 44815 40552 15311 33960 24073 13077 
#  TRUE  TRUE  TRUE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE 

一些基准

set.seed(123)
df <- as.data.frame(matrix(sample(1e7), ncol = 10)) 
vec <- sample(10)

library(microbenchmark)
microbenchmark("ZL: " = apply(df== vec, 1, all),
               "DA: " = rowSums(df == vec[col(df)]) == ncol(df))

# Unit: milliseconds
# expr      min        lq      mean    median        uq      max neval cld
# ZL:  2262.580 2386.5286 2421.7244 2420.6767 2454.1483 2592.888   100   b
# DA:   786.121  807.1531  836.7408  827.1577  849.9955 1038.139   100  a 
set.seed(123)

df只是一个注释,在当前的“data.frame”情况下,
Reduce(&),Map(==”,df,vec))==ncol(df)
避免了
Ops.data.frame
和创建第二个
dim(df)
对象(
vec[col(df)]
)。也许,也值得一提的是,
compiler::cmpfun
一个简单的
for(i in seq_沿着(df))ans=ans&(df[[i]==vec[[i]]]
只是一个注释,在当前的“data.frame”情况下,
Reduce(&),Map(==”,df,vec))==ncol(df)
避免了
Ops.data.frame
和创建第二个
dim(df)
对象(
vec[col(df)]
)。可能也值得一提的是,
compiler::cmpfun
一个简单的
for(i-in-seq_-on(df))ans=ans&(df[[i]==vec[[i]])
@Barranka,也应该是
apply(muestra,function(x)all(x==c(0,0,0,0),all)
apply(muestra==c(0,0,0,0,0),1,all)
==
比较下每一列,而不是下每一行。例如,使用
dat=data.frame(x=c(1,1),y=c(2,2))
dat==1:2
VS
t(应用(dat,1,“==”,1:2))
@Barranka,也:它不应该应用(muesta,函数(x)all(x==c(0,0,0))
(0,0,0,0,0),1,all)使
==
向下比较每一列而不是每一行。例如,使用
dat=data.frame(x=c(1,1),y=c(2,2))
dat==1:2
t(应用(dat,1,==”,1:2))
set.seed(123)
df <- as.data.frame(matrix(sample(1e7), ncol = 10)) 
vec <- sample(10)

library(microbenchmark)
microbenchmark("ZL: " = apply(df== vec, 1, all),
               "DA: " = rowSums(df == vec[col(df)]) == ncol(df))

# Unit: milliseconds
# expr      min        lq      mean    median        uq      max neval cld
# ZL:  2262.580 2386.5286 2421.7244 2420.6767 2454.1483 2592.888   100   b
# DA:   786.121  807.1531  836.7408  827.1577  849.9955 1038.139   100  a