2016-03-04 84 views
0

我想用grep子集的數據幀的列有一個行子集一個數據幀的列。當grep返回多個列時,新的數據框將具有來自grep的相應列名稱。當僅返回一列時,列名稱爲NULL ...我使用此方法,因爲我正在循環可能包含HVAC傳感器數據的不同組合的許多網站。使用grep的名稱(數據幀)

我想給每個單位「HVAC1」,「HVAC2」,「HVAC3」併爲通用於所有單位列的一個子集的子集。在這種情況下,所有單元只有一列是通用的:'IAT'或室內環境溫度。此外,沒有第三個HVAC單元,因此HVAC 3上的grep正確地返回names(sensordata.h3)作爲character(0)

這是我的代碼。

sensordata <- data.frame(sitetime = c("2015-10-22 14:15:17"), HVAC1RT = c(70.7), HVAC1ST = c(74.75), HVAC2RT = c(66.875), HVAC2ST = c(46.4), IAT = c(72.5)) 
sensordata 
names(sensordata) 

sensordata.h1 <- sensordata[,c(grep("HVAC1",names(sensordata)))] 
sensordata.h1 
names(sensordata.h1) 

sensordata.h2 <- sensordata[,c(grep("HVAC2",names(sensordata)))] 
sensordata.h2 
names(sensordata.h2) 

sensordata.h3 <- sensordata[,c(grep("HVAC3",names(sensordata)))] 
sensordata.h3 
names(sensordata.h3) 

sensordata.common <- sensordata[,c(grep("IAT|OAT|IAH",names(sensordata)))] 
sensordata.common 
names(sensordata.common) 
+0

你能突出你的編碼問題,即你所面臨的實際問題? – coffeinjunky

+0

事實上,你可能會丟失的問題。 – Parfait

+0

當只有一列由grep的作爲創建名爲sensordata.common子集的返回,爲名稱的調用(sensordata.common)返回NULL – user3794794

回答

0

嘗試這種情況:

sensordata.common <- sensordata[,c(grep("IAT|OAT|IAH",names(sensordata))), drop=F] 
sensordata.common 
    IAT 
1 72.5 
names(sensordata.common) 
[1] "IAT" 

選項drop=F防止[以降低輸出到一個向量。見?[(你需要使用反引號周圍[,不能讓它正確的格式在這裏...

或者,你可以在select(sensordata.common, contains("your_names_here"))使用dplyr::select,如圖dplyr的默認值是永遠不變的輸出類。