【发布时间】:2010-11-29 23:41:00
【问题描述】:
我有三个或更多表示为 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 in itertools 完成了部分工作,但我找不到任何方法来吸收迭代器的输出并将其放入数据框中。有什么建议吗?
附言这个计算的下一步看起来像
d$D <- f(d$A, d$B, d$C)
因此,如果您知道同时执行这两个步骤的方法,那也会很有帮助。
【问题讨论】:
-
如果你指定函数 f 的作用会很有用。
-
f是几种不同的数学计算之一的占位符,但就这个问题而言,我认为你需要知道的是它们都采用N个适当类型的向量并产生一个向量;所有输入的长度必须相同,输出也是该长度。 -
我建议更改此问题的标题...“数据表”现在在 R 中的含义有所不同。
-
@random_forest_fanatic 我将其更改为“数据框”。如果这不是你的意思,请澄清。 (我不知道你在说什么,但我的意思总是一个数据框架,而且标题确实是我的草率。)
-
@Frank 我挑剔的原因是因为我找到了这个问题,因为我正在搜索标题所说的内容:如何用 R 中的 data.table 做笛卡尔积。这个问题没有与该主题有关,因此我建议对其进行更改以避免将来出现混淆/误导。