![](/img/trans.png)
[英]Dplyr select_ and starts_with on multiple values in a variable list
[英]Dplyr select_ and starts_with on multiple values in a variable list part 2
这是我之前的问题的延续: Dplyr select_和starts_with对变量列表中的多个值
我正在从不同位置的不同传感器收集数据,数据输出类似于:
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))
问题(我认为)类似于: 使用select_和starts_with R或使用dplyr 基于多个字符串选择列
我想例如按位置搜索传感器,所以我有一个列表可以搜索数据框,还包括时间戳。 但是,当我搜索多个传感器(或传感器类型等)时,搜索就会失败。 有没有一种方法可以使用dplyr(NSE或SE)实现这一目标?
FindLocation = c("date", "Sensor1", "Sensor2")
df %>% select(matches(paste(FindLocation, collapse="|"))) # works but picks up "Sensor1a" and "DewPoint" and "Humidity" data from Sensor2
我也想添加混合搜索,例如:
FindLocation = c("Sensor1", "Sensor2") # without selecting "Sensor1a"
FindSensor = c("Temp", "Pressure") # without selecting "DewPoint" or "Humidity"
我希望选择将FindSensor与FindLocation结合在一起,并为Sensor1和Sensor2选择温度和压力数据(而不选择Sensor1a)。 返回带有数据和列标题的数据框:
日期,传感器1温度,传感器1压力,传感器2温度,传感器2压力
再次非常感谢!
purrr
某些功能将很有用。 首先,使用cross2
来计算FindLocation
和FindSensor
的笛卡尔积。 您将获得一个配对列表。 然后,您可以使用map_chr
对其paste
,并使用点( .
)将位置和传感器字符串连接在一起。 然后,使用one_of
助手来选择列。
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="|")))
怎么样呢?
library(tidyverse)
wich_col <- df %>% names %>% strsplit("[.]") %>% map_lgl(function(x)x[1]%in%FindLocation&x[2]%in%FindSensor)
df[wich_col]
?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.