Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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_Dataframe_Subset - Fatal编程技术网

基于其他数据帧的筛选/子集R数据帧

基于其他数据帧的筛选/子集R数据帧,r,dataframe,subset,R,Dataframe,Subset,我有两个数据帧,一个带有corr矩阵,另一个带有相应的p值(即,两者都是有序的,每个数据帧中的每个位置对应相同的变量)。我想根据两个条件过滤corr数据框中的元素: 1) 将每列与该列第一行中的元素进行比较,较小的元素应为NA或0 2) 如果第二个数据帧中的对应元素大于0.05,则该元素应再次变为0 示例如下所示: set.seed(2) a = sample(runif(5) ,rep=TRUE) b = sample(runif(5) ,rep=TRUE) c = sample(run

我有两个数据帧,一个带有corr矩阵,另一个带有相应的p值(即,两者都是有序的,每个数据帧中的每个位置对应相同的变量)。我想根据两个条件过滤corr数据框中的元素:

1) 将每列与该列第一行中的元素进行比较,较小的元素应为NA或0

2) 如果第二个数据帧中的对应元素大于0.05,则该元素应再次变为0

示例如下所示:

set.seed(2)
a = sample(runif(5)  ,rep=TRUE) 
b = sample(runif(5)  ,rep=TRUE)
c = sample(runif(5)  ,rep=TRUE)
corr_mat = data.frame(a,b,c)       

a = sample(runif(5,0,0.1)  ,rep=TRUE) 
b = sample(runif(5,0,0.1)  ,rep=TRUE)
c = sample(runif(5,0,0.1)  ,rep=TRUE)
p_values= data.frame(a,b,c)   
因此,我想以一种方式对corr_mat进行子集划分,即在a列中只保留那些大于a列第1行的值,并且p_值中相应的p值小于0.05

这是我想要的这些值的输出:

 > corr_mat
      a         b         c
 1 0.9438393 0.4052822 0.8368892
 2 0.1848823 0.4052822 0.6618988
 3 0.9438393 0.2388948 0.3875495
 4 0.5733263 0.7605133 0.3472722
 5 0.5733263 0.5526741 0.6618988

 > p_values
        a          b          c
 1 0.086886104 0.01632009 0.02754012
 2 0.051428176 0.09440418 0.09297202
 3 0.016464224 0.02970107 0.02754012
 4 0.086886104 0.01150841 0.09297202
 5 0.001041453 0.09440418 0.09297202
目标输出(基于第一个条件,每列大于或等于第一行值):

目标输出(基于两种条件-现在不包括大于0.05的相应p值):

我的想法大致如下:

 apply(corr_mat_df,2, comp)
其中comp定义为比较corr_mat中a列第1行和p_值中相应元素的值

comp<-function(df1,df2) {
for (i in 1:length(df1)) {
if (df[i]<df[1] & df2[i]>0.05){
  df[i]=NA
}
}
}

comp我们可以使用
mapply
使用
replace
一次性应用这两个条件。我们用
NA
替换满足其中一个条件的值

mapply(function(x, y) replace(x, (x < x[1]) | (y > 0.05), NA),corr_mat, p_values)


#             a         b         c
#[1,]        NA 0.4052822 0.8368892
#[2,]        NA        NA        NA
#[3,] 0.9438393        NA        NA
#[4,]        NA 0.7605133        NA
#[5,]        NA        NA        NA
mapply(函数(x,y)替换(x,(x0.05),NA),corr_mat,p_值)
#a、b、c
#[1,]NA 0.4052822 0.8368892
#[2,]NA-NA
#[3,]0.9438393 NA
#[4,]NA 0.7605133 NA
#[5,]NA-NA-NA
我们也可以通过

corr_mat *NA^(corr_mat < corr_mat[1,][col(corr_mat)] | p_values > 0.05 )
#         a         b         c
#1        NA 0.4052822 0.8368892
#2        NA        NA        NA
#3 0.9438393        NA        NA
#4        NA 0.7605133        NA
#5        NA        NA        NA
corr_-mat*NA^(corr_-mat0.05)
#a、b、c
#1 NA 0.4052822 0.8368892
#2娜娜娜娜
#3 0.9438393不适用
#4 NA 0.7605133 NA
#5NA NA NA
或者只是分配

corr_mat[corr_mat < corr_mat[1,][col(corr_mat)] | p_values > 0.05] <- NA

corr_-mat[corr_-mat0.05]
corr_-mat[1,1]
的输出应该是
NA
对吗?因为
p_值[1,1]
是0.086886104,大于0.05?嗯,实际上我没有想到这一点。这两种选择(NA和非NA,即使p_val us大于0.05)对于我的分析来说都是有意义的,如果需要您提供的解决方案,我现在可以自己更改。也非常好,非常感谢。我会在我的个人“备忘单”中添加这两种方法,我相信这两种方法都会派上用场。
corr_mat *NA^(corr_mat < corr_mat[1,][col(corr_mat)] | p_values > 0.05 )
#         a         b         c
#1        NA 0.4052822 0.8368892
#2        NA        NA        NA
#3 0.9438393        NA        NA
#4        NA 0.7605133        NA
#5        NA        NA        NA
corr_mat[corr_mat < corr_mat[1,][col(corr_mat)] | p_values > 0.05] <- NA