如何在R中有一串字符串?

时间:2015-11-04 15:10:53

标签: 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))),]

问题是,为了能够执行最后一部分,我需要一个&#34;字符串的字符串&#34;。我的意思是

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

因为parseeval。但这并不容易。我也尝试了toStringis.characteras.character,但没有成功。 谢谢你的每一个提示。

2 个答案:

答案 0 :(得分: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,您可以编写类似查询的SQL

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

答案 1 :(得分:1)

来自subset()的{​​{1}}:

{base}

带索引:

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