我有三个或更多的自变量表示为R矢量,像这样:笛卡尔乘积数据帧
A <- c(1,2,3)
B <- factor(c('x','y'))
C <- c(0.1,0.5)
和我想利用它们的所有的笛卡尔乘积,并把该结果到数据帧,这样的:
A B C
1 x 0.1
1 x 0.5
1 y 0.1
1 y 0.5
2 x 0.1
2 x 0.5
2 y 0.1
2 y 0.5
3 x 0.1
3 x 0.5
3 y 0.1
3 y 0.5
我可以通过手动写出调用rep
做到这一点:
d <- data.frame(A = rep(A, times=length(B)*length(C)),
B = rep(B, times=length(A), each=length(C)),
C = rep(C, each=length(A)*length(B))
但是必须有一个更优雅的方式来做到这一点,是的? product
itertools
做了部分工作,但我找不到任何方式来吸收迭代器的输出并将其放入数据框。有什么建议么?
p.s.在这个计算中的下一个步骤看起来像
d$D <- f(d$A, d$B, d$C)
所以如果你知道一种方法同时做两个步骤,这也将是有益的。
如果你指定了函数f所做的工作,它将会很有用。 – Ramnath 2010-11-30 00:07:00
`f`是一个占位符,用于几个不同的多毛数学计算之一,但为了这个问题的目的,我认为*你需要知道的是他们都需要N个适当类型的向量并产生一个向量;所有的输入必须是相同的长度,输出也是这个长度。 – zwol 2010-11-30 00:10:05
我建议改变这个问题的标题......“数据表”现在意味着R中的不同。 – 2015-11-11 14:44:18