Есть ли способ создать фрейм данных со строками для комбинаций переменных в других фреймах данных? - PullRequest
0 голосов
/ 25 марта 2019

У меня есть несколько фреймов данных, содержащих один столбец каждый. Я хочу создать фрейм данных, в котором есть строки для каждой возможной комбинации значений в других фреймах данных.

Я попробовал обходной путь с вложенными циклами for для каждого фрейма данных, но, поскольку у меня есть около 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")

Ответы [ 2 ]

4 голосов
/ 25 марта 2019

Один из вариантов - использовать 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 голос
/ 25 марта 2019

Мы можем использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...