不确定此操作的调用方式,Google也没有帮助。
假设我有两个这样的简单数据框:
var csv = new CsvReader( textReader );
var records = csv.GetRecords<MyClass>().ToList();
如何获得如下格式的数据框:
df1 <- data.frame(factor1 = c("a", "b", "c"))
df2 <- data.frame(factor2 = c("x", "y", "z"))
> df1
factor1
1 a
2 b
3 c
> df2
factor2
1 x
2 y
3 z
我认为这种操作可能会涉及到数据帧的倍增,但这不起作用:
factor1 factor2
1 a x
2 a y
3 a z
4 b x
5 b y
6 b z
7 c x
8 c y
9 c z
答案 0 :(得分:4)
这是两个数据框的笛卡儿产品,如果没有通用名称,则可以使用merge
:
merge(df1, df2)
# factor1 factor2
#1 a x
#2 b x
#3 c x
#4 a y
#5 b y
#6 c y
#7 a z
#8 b z
#9 c z
或更明确地说:
merge(df1, df2, by=c())
根据?merge
,当没有要加入的列时,它会返回两个数据框的笛卡儿积:
如果by和.x和by.y的长度为0(长度为零的向量或 NULL),结果r是x和y的笛卡尔乘积,即 dim(r)= c(nrow(x)* nrow(y),ncol(x)+ ncol(y))。
答案 1 :(得分:2)
以下是expand.grid
Map(expand.grid, factor1 = df1, factor2 = df2)$factor
# factor1 factor2
#1 a x
#2 b x
#3 c x
#4 a y
#5 b y
#6 c y
#7 a z
#8 b z
#9 c z