Dplyr选择并启动变量列表中的多个值第2部分

Dplyr选择并启动变量列表中的多个值第2部分,r,select,dplyr,purrr,multiple-matches,R,Select,Dplyr,Purrr,Multiple Matches,这是我先前问题的延续: 我从不同位置的不同传感器收集数据,数据输出如下: df<-data.frame(date=c(2011,2012,2013,2014,2015),"Sensor1 Temp"=c(15,18,15,14,19),"Sensor1 Pressure"=c(1001, 1000, 1002, 1004, 1000),"Sensor1a Temp"=c(15,18,15,14,19),"Sensor1a Pressure"=c(1001, 1000, 1002, 1004

这是我先前问题的延续:

我从不同位置的不同传感器收集数据,数据输出如下:

df<-data.frame(date=c(2011,2012,2013,2014,2015),"Sensor1 Temp"=c(15,18,15,14,19),"Sensor1 Pressure"=c(1001, 1000, 1002, 1004, 1000),"Sensor1a Temp"=c(15,18,15,14,19),"Sensor1a Pressure"=c(1001, 1000, 1002, 1004, 1000), "Sensor2 Temp"=c(15,18,15,14,19),"Sensor2 Pressure"=c(1001, 1000, 1002, 1004, 1000), "Sensor2 DewPoint"=c(10,11,10,9,12),"Sensor2 Humidity"=c(90, 100, 90, 100, 80))
library(tidyverse)
wich_col <- df %>% names %>% strsplit("[.]") %>% map_lgl(function(x)x[1]%in%FindLocation&x[2]%in%FindSensor)
df[wich_col]
我还想添加混合搜索,例如:

 FindLocation = c("Sensor1", "Sensor2") # without selecting "Sensor1a"
 FindSensor = c("Temp", "Pressure") # without selecting "DewPoint" or "Humidity"
我希望select将FindSensor与FindLocation结合起来,为传感器1和传感器2选择温度和压力数据(不选择传感器1A)。返回带有数据和列标题的数据帧:

日期、传感器1温度、传感器1压力、传感器2温度、传感器2压力


再次感谢

比如:

df<-data.frame(date=c(2011,2012,2013,2014,2015),"Sensor1 Temp"=c(15,18,15,14,19),"Sensor1 Pressure"=c(1001, 1000, 1002, 1004, 1000),"Sensor1a Temp"=c(15,18,15,14,19),"Sensor1a Pressure"=c(1001, 1000, 1002, 1004, 1000), "Sensor2 Temp"=c(15,18,15,14,19),"Sensor2 Pressure"=c(1001, 1000, 1002, 1004, 1000), "Sensor2 DewPoint"=c(10,11,10,9,12),"Sensor2 Humidity"=c(90, 100, 90, 100, 80))
library(tidyverse)
wich_col <- df %>% names %>% strsplit("[.]") %>% map_lgl(function(x)x[1]%in%FindLocation&x[2]%in%FindSensor)
df[wich_col]
库(tidyverse)
其中列%names%>%strsplit(“[.]”)%>%map\u lgl(函数(x)x[1]%在%FindLocation中,函数(x)x[2]%在%FindSensor中)
df[威奇科尔]

比如:

df<-data.frame(date=c(2011,2012,2013,2014,2015),"Sensor1 Temp"=c(15,18,15,14,19),"Sensor1 Pressure"=c(1001, 1000, 1002, 1004, 1000),"Sensor1a Temp"=c(15,18,15,14,19),"Sensor1a Pressure"=c(1001, 1000, 1002, 1004, 1000), "Sensor2 Temp"=c(15,18,15,14,19),"Sensor2 Pressure"=c(1001, 1000, 1002, 1004, 1000), "Sensor2 DewPoint"=c(10,11,10,9,12),"Sensor2 Humidity"=c(90, 100, 90, 100, 80))
library(tidyverse)
wich_col <- df %>% names %>% strsplit("[.]") %>% map_lgl(function(x)x[1]%in%FindLocation&x[2]%in%FindSensor)
df[wich_col]
库(tidyverse)
其中列%names%>%strsplit(“[.]”)%>%map\u lgl(函数(x)x[1]%在%FindLocation中,函数(x)x[2]%在%FindSensor中)
df[威奇科尔]

来自
purrr
的一些函数将非常有用。首先,使用
cross2
计算
FindLocation
FindSensor
的笛卡尔积。你会得到一个配对的列表。然后使用
map\u chr
对其应用
paste
,用点(
)连接位置和传感器字符串。然后使用助手的
one_选择列

library(purrr)

FindLocation = c("Sensor1", "Sensor2")
FindSensor = c("Temp", "Pressure")

columns = cross2(FindLocation, FindSensor) %>%
  map_chr(paste, collapse = ".")

df %>% select(one_of(columns))

来自
purrr
的一些函数将非常有用。首先,使用
cross2
计算
FindLocation
FindSensor
的笛卡尔积。你会得到一个配对的列表。然后使用
map\u chr
对其应用
paste
,用点(
)连接位置和传感器字符串。然后使用
助手的
one_选择列

library(purrr)

FindLocation = c("Sensor1", "Sensor2")
FindSensor = c("Temp", "Pressure")

columns = cross2(FindLocation, FindSensor) %>%
  map_chr(paste, collapse = ".")

df %>% select(one_of(columns))
我们可以使用

df %>% 
  select(matches(paste(c("date", outer(FindLocation, 
                FindSensor, paste, sep=".")), collapse="|")))
我们可以使用

df %>% 
  select(matches(paste(c("date", outer(FindLocation, 
                FindSensor, paste, sep=".")), collapse="|")))

尝试
df%>%选择(匹配(粘贴(c(“日期”),外部(FindLocation,FindSensor,paste,sep=“.”),折叠=“|”)
是的,谢谢!尝试
df%>%选择(匹配(粘贴(c(“日期”),外部(FindLocation,FindSensor,paste,sep=“.”),折叠=“|”)
是的,谢谢!谢谢,以前没有看过cross2-非常有用的功能!谢谢,以前没有看过cross2-非常有用的功能!