2015-02-09 2 views
0

У меня есть 5 категориальных переменных: возраст (5 уровней), пол (2 уровня), зона (4 уровня), qmat (5 уровней) и qsoc (5 уровней) для всего 1000 уникальные комбинации. Каждая уникальная комбинация имеет соответствующее значение данных (например, размер популяции). Я хотел бы присвоить эти данные таблице 1000 x 6, где первые пять столбцов содержат индексы возраста, пола, зоны, qmat, qsoc и 6-го столбца, которые содержат значение данных.R присваивать категориальные переменные матрице

Я хотел бы избежать использования вложенных циклов, которые неэффективны в R (некоторые из моих наборов данных будут иметь более 1000 уникальных комбинаций). Я знаю, что существует много инструментов в R для параллельных операций (но я не знаком с ними). Есть ли эффективный способ выполнить указанное выше назначение переменной с помощью параллельных/векторных операций? Будут оценены любые предложения или ссылки.

+0

Можете ли вы показать несколько строк набора данных и ожидаемого результата. Возможно, 'lst <- split (df, list (df $ age, df $ sex, df $ zone, df $ qmat, df $ qsoc), drop = TRUE); имена (lst) <- yournames; list2env (lst, envir = .GlobalEnv) ' – akrun

+1

Обычной структурой данных будет data.frame. В машинных алгоритмах также широко используется алгоритм работы с такими данными с использованием матриц с целыми числами для представления дискретных уровней. В настоящее время вопрос слишком расплывчатый, без описания ожидаемой обработки и примера. –

ответ

0

Трудно понять, как выглядят исходные данные, но при условии, что у вас есть данные на фрейме данных, вы можете использовать aggregate().

# simulating a data frame 
set.seed(1) 
N = 9000 
df = data.frame(pop=rnorm(N), 
       age=sample(1:5, N, replace=T), 
       sex=sample(1:2, N, replace=T) 
      ) 

# 'aggregate' this data frame by 'age' and 'sex' 
newData = aggregate(pop ~ age + sex, data=df, FUN=sum) 
0

Функция R expand.grid() решит мою проблему, например. expand.grid (список (возраст, пол, зона, qmat, qsoc))

Спасибо за все ответы и прошу прощения за любую возможную неясность в формулировке моего вопроса.

Смежные вопросы