Расширить сетку (или набор мощности) таблицы данных новыми столбцами в R - PullRequest
0 голосов
/ 26 мая 2018

У меня есть таблица данных, которую я тщательно построил (пример игрушки приведен ниже):

  library(data.table)
     Vmat1 = data.table(expand.grid(c(list(d = 1:2, w = 1:(3)))))

> Vmat1
   d w
1: 1 1
2: 2 1
3: 1 2
4: 2 2
5: 1 3
6: 2 3

Я хочу взять набор мощности в следующем смысле.Для каждого столбца Vmat я хочу создать новый столбец с тем же именем с суффиксом «простое».Затем я хочу перечислить набор мощности так, чтобы для каждой исходной строки в исходных данных был новый ряд всех возможностей (не относящихся к проблеме, но вы могли бы представить, что я правильно пытаюсь работать с переходами состоянийв цепочке Маркова)

Это даст следующий вывод:

    d w dprime wprime
 1: 1 1      1      1
 2: 2 1      1      1
 3: 1 2      1      1
 4: 2 2      1      1
 5: 1 3      1      1
 6: 2 3      1      1
 7: 1 1      2      1
 8: 2 1      2      1
 9: 1 2      2      1
10: 2 2      2      1
11: 1 3      2      1
12: 2 3      2      1
13: 1 1      1      2
14: 2 1      1      2
15: 1 2      1      2
16: 2 2      1      2
17: 1 3      1      2
18: 2 3      1      2
19: 1 1      2      2
20: 2 1      2      2
21: 1 2      2      2
22: 2 2      2      2
23: 1 3      2      2
24: 2 3      2      2
25: 1 1      1      3
26: 2 1      1      3
27: 1 2      1      3
28: 2 2      1      3
29: 1 3      1      3
30: 2 3      1      3
31: 1 1      2      3
32: 2 1      2      3
33: 1 2      2      3
34: 2 2      2      3
35: 1 3      2      3
36: 2 3      2      3

Обратите внимание, что обходной путь, при котором простая матрица строится напрямую без Vmat, в моем контексте не полезен.Манипуляции должны быть сделаны на Vmat напрямую.Он был сокращен, и выполнение полной настройки мощности непосредственно на фактических данных приведет к ошибке памяти, а также является громоздким, поскольку имеется большое количество столбцов.

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Вот подход data.table, который зависит от переработки:

NewMat <- Vmat1[ , list(d=d,w=w, dprime=rep(d, each=6), wprime=rep(w, each=6))]

> str(NewMat)
Classes ‘data.table’ and 'data.frame':  36 obs. of  4 variables:
 $ d     : int  1 2 1 2 1 2 1 2 1 2 ...
 $ w     : int  1 1 2 2 3 3 1 1 2 2 ...
 $ dprime: int  1 1 1 1 1 1 2 2 2 2 ...
 $ wprime: int  1 1 1 1 1 1 1 1 1 1 ...
 - attr(*, ".internal.selfref")=<externalptr> 

Обобщение замены nrow (Vmat1) для 6

0 голосов
/ 26 мая 2018

A tidyverse подход:

Vmat1 = data.frame(expand.grid(c(list(d = 1:2, w = 1:3))))

library(tidyverse)

Vmat1 %>%
  mutate(list(.)) %>%       # for every row add the same whole dataframe as a list
  unnest() %>%              # unnest the nested new column
  setNames(gsub("1", "prime", names(.)))  # update names

Это решит проблему с именами

Vmat1 = data.frame(expand.grid(c(list(d = 1:2, w = 1:3))))
Vmat2 = Vmat1
names(Vmat2) = paste0(names(Vmat1), "prime")

library(tidyverse)

Vmat1 %>%
  mutate(list(d=Vmat2)) %>%   # for every row add the same dataframe (updated names) as a list
  unnest()                    # unnest the nested new column
...