我有一个数据框DF1
,例如:
DF1=data.frame(LA=1:5,VA=2:6)
我想估计一个模型(不使用标准函数),我的公式是(例如)~ LA + VA + I(LA*VA)
。 R中是否有这样的功能可以根据我的公式将原始数据帧转换为现成的数据帧?例如:
magicFunction(DF1,"LA + VA + I(LA*VA)")
或
magicFunction(DF1,c("LA", "VA", "LA*VA"))
会返回:
LA VA V3
1: 1 2 2
2: 2 3 6
3: 3 4 12
4: 4 5 20
5: 5 6 30
我的实际问题是我的公式比~ LA + VA + I(LA*VA)
复杂得多(并且在这个阶段没有实际确认),所以我正在寻找一个可以处理这个问题的函数。
(data.table的解决方案对我也有用)
答案 0 :(得分:3)
head(mtcars[c("cyl","gear")])
# cyl gear
#Mazda RX4 6 4
#Mazda RX4 Wag 6 4
#Datsun 710 4 4
#Hornet 4 Drive 6 3
#Hornet Sportabout 8 3
#Valiant 6 3
head(model.frame(cyl~I(cyl*gear), data = mtcars))
# cyl I(cyl * gear)
#Mazda RX4 6 24
#Mazda RX4 Wag 6 24
#Datsun 710 4 16
#Hornet 4 Drive 6 18
#Hornet Sportabout 8 24
#Valiant 6 18
正如@alistaire指出:
> model.frame(~LA+VA+cbind(V3 = I(LA*VA)), data = df)
# LA VA V3
#1 1 2 2
#2 2 3 6
#3 3 4 12
#4 4 5 20
#5 5 6 30