Преобразование одного столбца в форму корреляционной матрицы - PullRequest
0 голосов
/ 07 июля 2019

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

Мои входные данные:

DATA
1664
1790
1678
1789
1778
1871

Требуемый выход:

DATA    1664    1790    1678    1789    1778    1871
1664    1664    1790    1678    1789    1778    1871
1790    1664    1790    1678    1789    1778    1871
1678    1664    1790    1678    1789    1778    1871
1789    1664    1790    1678    1789    1778    1871
1778    1664    1790    1678    1789    1778    1871
1871    1664    1790    1678    1789    1778    1871

Ответы [ 5 ]

2 голосов
/ 07 июля 2019

Вы можете передать list полный отдельных значений в правую часть назначения, и он заполнит все строки.Т.е.:

dat[as.character(dat$DATA)] <- as.list(dat$DATA)
dat
#  DATA 1664 1790 1678 1789 1778 1871
#1 1664 1664 1790 1678 1789 1778 1871
#2 1790 1664 1790 1678 1789 1778 1871
#3 1678 1664 1790 1678 1789 1778 1871
#4 1789 1664 1790 1678 1789 1778 1871
#5 1778 1664 1790 1678 1789 1778 1871
#6 1871 1664 1790 1678 1789 1778 1871

Где dat было:

dat <- read.table(text="DATA
1664
1790
1678
1789
1778
1871", header=TRUE)
0 голосов
/ 07 июля 2019

Опция с replicate

t(replicate(nrow(dat), dat$DATA))
0 голосов
/ 07 июля 2019
library(purrr)

data = c(1664,
         1790,
         1678,
         1789,
         1778,
         1871)

map_dfc(data,~rep(.,length(data)))

# A tibble: 6 x 6
     V1    V2    V3    V4    V5    V6
  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1  1664  1790  1678  1789  1778  1871
2  1664  1790  1678  1789  1778  1871
3  1664  1790  1678  1789  1778  1871
4  1664  1790  1678  1789  1778  1871
5  1664  1790  1678  1789  1778  1871
6  1664  1790  1678  1789  1778  1871
0 голосов
/ 07 июля 2019

Транспонирование и повторение строк:

df <- as.data.frame(t(c(1664, 1790, 1678, 1789, 1778, 1871)))
df[rep(seq_len(nrow(df)), ncol(df)),]

выход

      V1   V2   V3   V4   V5   V6
1   1664 1790 1678 1789 1778 1871
1.1 1664 1790 1678 1789 1778 1871
1.2 1664 1790 1678 1789 1778 1871
1.3 1664 1790 1678 1789 1778 1871
1.4 1664 1790 1678 1789 1778 1871
1.5 1664 1790 1678 1789 1778 1871
0 голосов
/ 07 июля 2019

Решение в базе R с использованием цикла for:

DATA <-c(1664, 1790, 1678, 1789, 1778, 1871)
list <- list()

for(i in 1:length(DATA)){
  list[[i]] <- rep(DATA[i], length(DATA))
}

df <- as.data.frame(do.call(cbind, list))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...