R:'乘以'字符串的数据帧列

时间:2017-08-08 00:04:04

标签: r dataframe

不确定此操作的调用方式,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

2 个答案:

答案 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