返回包含r 数据

为了仅对感兴趣的列过滤data.frame,我需要在此data.frame中查找包含超出特定范围的数据的列。 让data.frame为

df<-data.frame(x1=c(1,5,9),x2=c(10,20,30),x3=c(20,100,1000))
ranges<-data.frame(y1=c(3,8),y2=c(10,20),y3=c(15,1250))

作为输出,我想要一个返回名称的列表:“ x1”,“ x2”

我尝试了以下操作,但是代码仅在“范围”包含下面指定的所有数字时才有效,并且在找到该数字时才匹配。不幸的是,那不是我所需要的。

ranges<-c(15:300,10:20)
df.l<-colnames(df)[sapply(df,function(x) any(x %in% ranges))]

有什么想法吗? 谢谢!

cs52012301 回答:返回包含r 数据

如果“范围”是数据框或列表,则一个选项是

names(which(unlist(Map(function(x,y) any(!(x >= y[1] & x <= y[2])),df,ranges))))
#[1] "x1" "x2"

或使用反向逻辑

names(which(unlist(Map(function(x,y) any(x < y[1]| x > y[2]),ranges))))

或者在tidyverse中,

library(purrr)
library(dplyr)
library(tibble)
map2(df,ranges,~ between(.x,.y[1],.y[2]) %>% `!` %>% any) %>% 
    enframe %>% 
    unnest(cols = value) %>% 
    filter(value) %>% 
    pull(name)
#[1] "x1" "x2"

数据

ranges <- data.frame(y1 = c(3,8),y2 = c(10,20),y3 = c(15,1250))
本文链接:https://www.f2er.com/3132265.html

大家都在问