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

Deleting columns in a data frame using a list of variable names

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

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

注意:标签是我的猜测。

如果您不将公式放在 " " 之间,它将被识别为公式,并且可以使用 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

我是不是遗漏了什么,或者只是 temp <- df[,step3] return 完全按照您说的去做?