Обратитесь к имени столбца и имени строки в операторе применения в R - PullRequest
0 голосов
/ 29 октября 2018

У меня есть датафрейм в R, похожий на приведенный ниже.

    a b c d e f
    0 1 1 0 0 0
    1 1 1 1 0 1
    0 0 0 1 0 1
    1 0 0 1 0 1
    1 1 1 0 0 0

База данных большая, охватывает более 100 столбцов и 5000 строк и содержит все двоичные файлы (0 и 1). Я хочу построить перекрытие между каждым и каждым столбцом в R. Что-то похожее на приведенное ниже. Этот перекрывающийся кадр данных будет представлять собой квадратную матрицу с равным количеством строк и столбцов, которая будет равна количеству столбцов в 1-м кадре данных.

      a b c d e f
    a 3 2 2 2 0 2
    b 2 3 3 3 0 1
    c 2 3 3 1 0 1
    d 2 3 1 3 0 3
    e 0 0 0 0 0 0
    f 2 1 1 3 0 3

Каждая ячейка второго кадра данных заполняется количеством случаев, когда в строке и столбце есть 1 в первом кадре данных.

Я подумываю о создании пустой матрицы следующим образом:

    df <- matrix(ncol = ncol(data), nrow = ncol(data))
    colnames(df) <- names(data)
    rownames(df) <- names(data)

.. и итерации по каждой ячейке этой матрицы, используя команду apply, считывающую соответствующее имя строки (скажем, x) и имя столбца (скажем, y) и запускающую функцию, подобную приведенной ниже.

    summation <- function (x,y) (return (sum(data$x * data$y)))

Проблема в том, что я не могу найти имя строки и имя столбца в функции применения. Любая помощь будет оценена.

Любой более эффективный способ, чем я думаю, более чем приветствуется.

1 Ответ

0 голосов
/ 29 октября 2018

Вы ищете crossprod

crossprod(as.matrix(df1))
#  a b c d e f
#a 3 2 2 2 0 2
#b 2 3 3 1 0 1
#c 2 3 3 1 0 1
#d 2 1 1 3 0 3
#e 0 0 0 0 0 0
#f 2 1 1 3 0 3

Данные

df1 <- structure(list(a = c(0L, 1L, 0L, 1L, 1L), b = c(1L, 1L, 0L, 0L, 
1L), c = c(1L, 1L, 0L, 0L, 1L), d = c(0L, 1L, 1L, 1L, 0L), e = c(0L, 
0L, 0L, 0L, 0L), f = c(0L, 1L, 1L, 1L, 0L)), .Names = c("a", 
"b", "c", "d", "e", "f"), class = "data.frame", row.names = c(NA, 
-5L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...