Как добавить матрицу в data.frame? - PullRequest
1 голос
/ 20 июня 2019

ниже приведены некоторые фиктивные данные.

Предположим, у меня есть фрейм данных

df = data.frame(source = c("X1", "X2", "X3", "X4", "X5", "X6", "X7", "X8", "X9", "X10",
                       "X11", "X12", "X13", "X14", "X15", "X16", "X17", "X18", "X19", "X110"),
                Destination = c("X3","X5","X17", "X20", "X20","X1", "X2", "X3", "X7", "X10", 
                                "X13","X15","X7", "X1", "X20","X17", "X2", "X3", "X7", "X10"),
                weight = seq(1,1.95,by=0.05))

Затем у меня есть некоторые коэффициенты шансов для Destinations X1:X3 и соответствующие стандартные отклонения, и я хочу 10 раз случайным образом выбрать из каждого коэффициента шансов и соответствующего стандартного отклонения

OR_dat <- c(1.55,1.39,1.77)

sds <- c(0.2925175, 0.4775346, 0.1603566)
n <- 10

normv <- function( n , mean , sd ){
  out <- rnorm( n*length(mean) , mean = mean , sd = sd )
  return( matrix( out , ncol = n , byrow = FALSE ))
}

RR_neighbour_1 <- data.frame(t(normv(n, OR_dat , sds )))
colnames(RR_neighbour_1) <- c("X1",  "X2",  "X3")

Что мне действительно нужно, так это объединить матрицу с data.frame, посмотрев на значение в столбце с заголовком "Destination", сопоставив его с именем столбца матрицы с заголовком RR_neighbour_1, а затем создав дополнительные строки. ввести распределение. Вывод должен закончиться следующим образом:

enter image description here

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Что вы на самом деле хотите сделать, так это объединить два фрейма данных с Destination.Итак, сначала вам нужно перевести ваш второй data.frame (RR_neighbour_1) в длинный формат (то есть в тот же формат, что и первый, где различные пункты назначения - это строки, а не столбцы).Затем вы можете просто объединить data.frames с функцией merge.Аргумент all=T обеспечит добавление строк для повторяющихся адресатов.

RR_neighbour_1 <- reshape(RR_neighbour_1,dir="long",varying = list(1:3),
                          timevar = "Destination",
                          times = colnames(RR_neighbour_1),
                          v.names = "RR_neighbour_1")

merge(df, RR_neighbour_1[,-3], all=T)
0 голосов
/ 20 июня 2019

Одна возможность: если вы счастливы использовать пакет dplyr, он включает функции соединения в стиле SQL.Возможно, вам нужна функция left_join из этого пакета, которая позволяет отображать столбцы с помощью параметра by.Это простой способ объединения двух табличных структур.

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