使用大于x的任何值提取所有行

Joe*_*Joe 1 r dataframe tidyverse

假设我有一个非常大的相关表,并且只想检查大于某个值的相关性(例如,0.40).如何提取值大于0.40的所有行或列?

我可以使用apply执行此操作,但希望在tidyverse中执行操作.

library(tidyverse)

df <- mtcars %>% 
  select_if(is.numeric) %>% 
  cor() %>% 
  round(digits = 2) %>% 
  as.data.frame() 

df[apply(df, 1, function(row) {all(abs(row) > .40)}),]
Run Code Online (Sandbox Code Playgroud)

avi*_*seR 5

你可以使用filter_all:

library(tidyverse)

df <- mtcars %>% 
  select_if(is.numeric) %>% 
  cor() %>% 
  round(digits = 2) %>% 
  as.data.frame() %>%
  filter_all(all_vars(abs(.) > 0.4))
Run Code Online (Sandbox Code Playgroud)

结果:

    mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
1  1.00 -0.85 -0.85 -0.78  0.68 -0.87  0.42  0.66  0.60  0.48 -0.55
2 -0.85  1.00  0.90  0.83 -0.70  0.78 -0.59 -0.81 -0.52 -0.49  0.53
Run Code Online (Sandbox Code Playgroud)

要选择所有值都大于0.4,使用select_if:

df <- mtcars %>% 
  select_if(is.numeric) %>% 
  cor() %>% 
  round(digits = 2) %>% 
  as.data.frame() %>%
  select_if(funs(all(abs(.) > 0.4)))
Run Code Online (Sandbox Code Playgroud)

结果:

       mpg   cyl
mpg   1.00 -0.85
cyl  -0.85  1.00
disp -0.85  0.90
hp   -0.78  0.83
drat  0.68 -0.70
wt   -0.87  0.78
qsec  0.42 -0.59
vs    0.66 -0.81
am    0.60 -0.52
gear  0.48 -0.49
carb -0.55  0.53
Run Code Online (Sandbox Code Playgroud)

注意:

如果您想要任何值大于0.4的行或列,只需切换出all_varsall使用any_varsany分别:

filter_all(any_vars(abs(.) > 0.4))

select_if(funs(any(abs(.) > 0.4)))
Run Code Online (Sandbox Code Playgroud)