我有以下数据框
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")
因为parse
和eval
。但这并不容易。我也尝试了toString
和is.character
或as.character
,但没有成功。
谢谢你的每一个提示。
答案 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)