2015-11-04 39 views
1

我有以下的數據幀如何在R中有一串字符串?

patientID<-c(1,2,3,4,5,6,7,8) 
age<-c(25,30,28,52,45,26,36,32) 
s<-c("m","w","w","m","w","w","m","w") 
diabetes<-c("T1","T2","T2","T3","T1","T2","T1","T1") 
status<-c("poor","ïmproved","poor","ïmproved","Excellent","poor","ïmproved","Excellent") 
patientenData<-data.frame(patientID,age,diabetes,status,s) 

,並希望如下

filter<-c(s=="m","age>28","OR",s=="w","age>38") 
filter<-paste(filter,collapse="&") 
filter<-gsub("&OR&","|",filter) 
patientenData<-patientenData[with(patientenData,eval(parse(text=filter))),] 

的問題是,要能夠執行的最後一部分,我需要一種「串的串寫一個過濾器」。我的意思是

filter<-c("s=="m"","age>28","OR","s=="w"","age>38") 

因爲parseeval。但這並不容易。我也試過toStringis.characteras.character,但沒有成功。 感謝您的每一個提示。

+2

您可以使用混合引號的轉義字符在引號中實現引號。例如:''和Bob向我說'hello'。「' – sdgfsdh

+2

'filter <-c(」s =='m'「,」age> 28「,」OR「,」s =='w'「 ,「年齡> 38」)有效。但我也會考慮在沒有這種文本處理方法的情況下做這個過濾器 –

+0

wau非常感謝! – maniA

回答

3

data.table包是一個更好的路要走:

library(data.table) 
patientID<-c(1,2,3,4,5,6,7,8) 
age<-c(25,30,28,52,45,26,36,32) 
s<-c("m","w","w","m","w","w","m","w") 
diabetes<-c("T1","T2","T2","T3","T1","T2","T1","T1") 
status<-c("poor","ïmproved","poor","ïmproved","Excellent","poor","ïmproved","Excellent") 
patientenData<-data.table(patientID,age,diabetes,status,s) 

作爲data.table然後你可以從{base}寫出這樣的查詢

filtered<-patientenData[s=='m' & age>28 | s =='w'&age>38] 
1

一個SQL與subset()

filtered <- subset(patientenData, s=='m' & age>28 | s =='w' & age>38) 

與索引:

filtered <- patientenData[with(patientenData, s=='m' & age>28 | s =='w' & age>38), ] 
相關問題