使用变量名称列表删除数据框中的列

时间:2016-04-07 20:34:37

标签: r subset

我有一个自动脚本生成一个标准公式(即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

但是这个解决方案并不适合自动化...所以我需要从我所拥有的那个跳到那个结果。有什么想法吗?

注意:标签是我的猜测。

2 个答案:

答案 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]返回您想要的内容?