使用带()的字符向量

时间:2014-01-28 10:19:29

标签: r loops character

我正在尝试创建一个巨大的汇总表,并希望循环一组变量并创建简单的频率。有各种变量(例如,年龄,性别),但它们都将被分成两部分。我试图创建变量的字符向量及其二分法(下面的'vars'),然后使用with将它们应用于数据。可悲的是,这不起作用。

vars = c("SEX=='M'",'BMI<25')
data = data.frame(SEX=c('M','F','M'), BMI=c(10,20,30)) # dummy data
for (this.var in vars){
   true.false.var = with(data,this.var)
   tab = table(true.false.var)
}

1 个答案:

答案 0 :(得分:0)

尝试

vars = c("SEX=='M'",'BMI<25')
data = data.frame(SEX=c('M','F','M','M'), BMI=c(10,20,30,40)) # dummy data
lapply(vars, function(x) {
  with(data, table(eval(parse(text=x))))
})
# [[1]]
# 
# FALSE  TRUE 
# 1     3 
# 
# [[2]]
# 
# FALSE  TRUE 
# 2     2

他们的关键是在代码中使用tab = with(data, table(eval(parse(text=true.false.var))))eval(parse())告诉R该字符串是一个表达式。如果没有with(data, ...)语句,R将搜索名为SEXBMI的对象,这些对象在环境中不可用。

相关问题