объединить и развернуть 2 кадра данных - PullRequest
0 голосов
/ 18 марта 2019

Мне нужен способ объединить и развернуть два кадра данных.Таким образом, в этом упрощенном примере мне нужно объединить на type и развернуть plot, чтобы он появлялся в каждой строке нового фрейма данных, где ему соответствует type.Приведенный ниже пример выходных данных был предоставлен только для первых 2 строк df1, но окончательный dataFrame в этом примере должен содержать 50 строк.Есть ли простой способ сделать это?

data:

type <- c("control","treat","treat","control","control")
plot <- c(1,2,3,4,5)
df1 <- data.frame(plot, type)
bands <- c(seq(1,10),seq(1,10))
otherInfo <- rep("stuff", 20)
otherInfo2 <- rep("things",20)
type <- c(rep("control",10),rep("treat",10))
df2 <- data.frame(bands, otherInfo, otherInfo2, type)

dataFrame1:

plot    type
  1 control
  2   treat
  3   treat
  4 control
  5 control

dataFrame2:

bands otherInfo otherInfo2    type
1      stuff        things  control
2      stuff        things  control
3      stuff        things  control
4      stuff        things  control
5      stuff        things  control
6      stuff        things  control
7      stuff        things  control
8      stuff        things  control
9      stuff        things  control
10     stuff        things  control
1      stuff        things    treat
2      stuff        things    treat
3      stuff        things    treat
4      stuff        things    treat
5      stuff        things    treat
6      stuff        things    treat
7      stuff        things    treat
8      stuff        things    treat
9      stuff        things    treat
10     stuff        things    treat

dataFrame3 (желаемый вывод)

bands otherInfo otherInfo2  type  plot
   1        stuff things control   1
   2        stuff things control   1
   3        stuff things control   1
   4        stuff things control   1
   5        stuff things control   1
   6        stuff things control   1
   7        stuff things control   1 
   8        stuff things control   1 
   9        stuff things control   1
  10        stuff things control   1
   1        stuff things treat     2
   2        stuff things treat     2
   3        stuff things treat     2
   4        stuff things treat     2 
   5        stuff things treat     2
   6        stuff things treat     2
   7        stuff things treat     2
   8        stuff things treat     2
   9        stuff things treat     2
  10        stuff things treat     2
etc... 

1 Ответ

1 голос
/ 18 марта 2019
df3 = do.call(rbind,  lapply(split(df2, df2$bands), function(x)
    merge(x, df1, by = "type", all = TRUE)))
NROW(df3)
# [1] 50

Возможно, вам придется изменить порядок строк, если это важно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...