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)
你可以使用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_vars或all使用any_vars或any分别:
filter_all(any_vars(abs(.) > 0.4))
select_if(funs(any(abs(.) > 0.4)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4318 次 |
| 最近记录: |