我有一个自动脚本生成一个标准公式(即y~x1 + x2),我想根据这些变量筛选出我的数据。
到目前为止,我已经走到了这一步,但是我找到了一个难以理解的问题:
#Example data
df <- data.frame(x=1:5, y=2:6, z=3:7, u=4:8)
df
x y z u
1 1 2 3 4
2 2 3 4 5
3 3 4 5 6
4 4 5 6 7
5 5 6 7 8
#Example formula
ex_form = "x~y+u"
#Delete the ~ and add a + sign to be consistent
step1 = gsub("~","+", ex_form)
#Remove + signs
step2 = strsplit(step1, "\\+")
#Final list of variables
step3 = unlist(step2)
我见过的大多数解决方案都是:
#Create list of variables
mylist = c("x", "y", "u")
#Cut data
temp = df[ ,mylist]
temp
x y u
1 1 2 4
2 2 3 5
3 3 4 6
4 4 5 7
5 5 6 8
但是这个解决方案并不适合自动化...所以我需要从我所拥有的那个跳到那个结果。有什么想法吗?
注意:标签是我的猜测。
答案 0 :(得分:1)
如果您未将公式置于" "
之间,则会将其识别为此类公式,并且可以使用all.vars()
从中提取变量。
ex_form = x~y+u #Without quotes it is a formula, check str(ex_form)
df[, all.vars(ex_form)]
# x y u
#1 1 2 4
#2 2 3 5
#3 3 4 6
#4 4 5 7
#5 5 6 8
答案 1 :(得分:1)
我是否遗漏了某些内容,或者只是简单地按temp <- df[,step3]
返回您想要的内容?