我的testData中有几个数字变量:
testData<-data.frame(a1=1:10, a2=2:11, b1=101:110, b2=102:111)
我将变量的名称拉出如下:
a<-names(select(test, starts_with("a")))
b<-names(select(test, starts_with("b")))
然后我创建了以下组合:
vardata<-expand.grid(a, b)
vars<-paste(vardata$Var1,vardata$Var2,"=",vardata$Var1,"-",vardata$Var2)
vars<-gsub("\\s+|\\s+?", "", vars)
如果你运行vars,你应该得到:
"a1b1=a1-b1" "a2b1=a2-b1" "a1b2=a1-b2" "a2b2=a2-b2"
现在将它传递给DPLYR mutate函数时,我收到一个错误:
testData2<-mutate(testData, parse(text=vars))
Error: unsupported type for column 'parse(text = vars)' (EXPRSXP, classes = expression)
有人可以帮忙吗? 感谢
答案 0 :(得分:0)
请记住,调用(标记)中的=
与表达式(赋值)中的=
不同。您可以通过这种方式建立对mutate
的适当调用,虽然它有点丑陋:
> C <- call("mutate", quote(testData))
> for(e in parse(text=vars)) {C[as.character(e[[2]])] <- e[3]; print(C) }
mutate(testData, a1b1 = a1 - b1)
mutate(testData, a1b1 = a1 - b1, a2b1 = a2 - b1)
mutate(testData, a1b1 = a1 - b1, a2b1 = a2 - b1, a1b2 = a1 -
b2)
mutate(testData, a1b1 = a1 - b1, a2b1 = a2 - b1, a1b2 = a1 -
b2, a2b2 = a2 - b2)
然后:
>eval(C)
a1 a2 b1 b2 a1b1 a2b1 a1b2 a2b2
1 1 2 101 102 -100 -99 -101 -100
2 2 3 102 103 -100 -99 -101 -100
3 3 4 103 104 -100 -99 -101 -100
4 4 5 104 105 -100 -99 -101 -100
5 5 6 105 106 -100 -99 -101 -100
6 6 7 106 107 -100 -99 -101 -100
7 7 8 107 108 -100 -99 -101 -100
8 8 9 108 109 -100 -99 -101 -100
9 9 10 109 110 -100 -99 -101 -100
10 10 11 110 111 -100 -99 -101 -100
也就是说,有更容易的方法来生成列的线性组合。