我有几个数据帧,每个帧都包含一列。我想创建一个数据行,其中每个行都有其他数据帧中值的每种可能组合。
我尝试了一种针对每个数据帧嵌套循环的解决方法,但是由于我有大约20个数据帧,因此变得非常乏味。
# the data frames I already have
df1 <- data.frame(c("A","B","C"))
colnames(df1) <- c("x")
df2 <- data.frame(c("ALPHA","BRAVO","CHARLIE"))
colnames(df2) <- c("y")
# the data frame I want to create
df3 <- data.frame(c("A", "A", "A", "B", "B", "B", "C", "C", "C"),
c("ALPHA","BRAVO","CHARLIE", "ALPHA","BRAVO","CHARLIE", "ALPHA","BRAVO","CHARLIE"))
colnames(df3) <- c("x", "y")
答案 0 :(得分:3)
一种选择是使用tidyr::crossing
tidyr::crossing(df1, df2)
# df1$x df2$y
# <fct> <fct>
#1 A ALPHA
#2 A BRAVO
#3 A CHARLIE
#4 B ALPHA
#5 B BRAVO
#6 B CHARLIE
#7 C ALPHA
#8 C BRAVO
#9 C CHARLIE
您只需在其中添加所有数据框,它就会为您提供所有组合的输出。
在基数R中,您还可以通过将所有数据帧放在一个列表中来使用merge
中的Reduce
。
Reduce(merge, list(df1, df2))
答案 1 :(得分:0)
我们可以使用CJ
中的data.table
library(data.table)
CJ(x= df1$x, y = df2$y)
# x y
#1: A ALPHA
#2: A BRAVO
#3: A CHARLIE
#4: B ALPHA
#5: B BRAVO
#6: B CHARLIE
#7: C ALPHA
#8: C BRAVO
#9: C CHARLIE