2017-07-28 10 views
0

これは、以前の私の質問の続きです:DplyrのSELECT_とstarts_with 2

:データ出力のようなもので、 Dplyr select_ and starts_with on multiple values in a variable list

私はさまざまな場所にdifferntセンサからのデータを収集しています

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)) 

問題がに似て(と思う)です:Using select_ and starts_with R または select columns based on multiple strings with dplyr

私は、LOによって例えばセンサーを検索します私はデータフレームを検索するリストを持ち、タイムスタンプも含んでいます。しかし、複数のセンサー(またはセンサーのタイプなど)を検索すると、検索が分断されます。これを達成するためにdplyr(NSEまたはSE)を使用する方法はありますか?私は選択がFindLocationでFindSensorを組み合わせて、(Sensor1aを選択せず​​に)センサー1とSENSOR2のための温度や圧力のデータを選択し、期待しています

FindLocation = c("Sensor1", "Sensor2") # without selecting "Sensor1a" 
FindSensor = c("Temp", "Pressure") # without selecting "DewPoint" or "Humidity" 

FindLocation = c("date", "Sensor1", "Sensor2") 
df %>% select(matches(paste(FindLocation, collapse="|"))) # works but picks up "Sensor1a" and "DewPoint" and "Humidity" data from Sensor2 

はまた、私のような混合検索を追加します。再び

日付、センサー1の温度、センサー1の圧力、温度センサ2、センサ2圧力

多くのおかげ:データと列の見出しでデータフレームを返します!

+0

を使用することができます崩壊= "|"))) ' – akrun

+0

はい、ありがとう! –

答えて

2

purrrの一部の機能が役立ちます。まず、cross2を使用して、FindLocationFindSensorのデカルト積を計算します。ペアのリストが表示されます。次に、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)) 
+0

ありがとう、前にcross2を見たことがない - 非常に便利な機能! –

1

どうのようなものについて:

library(tidyverse) 
wich_col <- df %>% names %>% strsplit("[.]") %>% map_lgl(function(x)x[1]%in%FindLocation&x[2]%in%FindSensor) 
df[wich_col] 

+0

作業と感謝! –

2

我々は、DF%>%(マッチ(ペースト(C( "日付"、外側(FindLocation、FindSensor、ペースト、9月= "を。"))を選択し `てみ

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

作品!ありがとう、日付を選択する –