Получение данных из массива в фрейм данных - PullRequest
0 голосов
/ 03 сентября 2018

так что у меня есть 2 набора данных, первый из них - это датафрейм

df1 <- data.frame(user=c(1:10), h01=c(3,3,6,8,9,10,4,1,2,5), h12=c(5,5,3,4,1,2,8,8,9,10),a=numeric(10))

первый столбец представляет идентификатор user, а h01 представляет идентификатор антенны сотового телефона, с которой user подключен в течение определенного периода времени (00:00 - 1:00 AM), и h12 означает то же самое, но с 1:00 до 2:00.

А потом у меня есть массив

array1 <- array(c(23,12,63,11,5,6,9,41,23,73,26,83,41,51,29,10,1,5,30,2), dim=c(10,2))

Строки представляют идентификатор антенны сотового телефона, столбцы представляют периоды времени, а значения в array1 представляют, сколько человек подключено к антенне в этот период времени. Таким образом, array1[1,1] напечатает, сколько людей подключено между 00:00 и 1:00 к антенне 1, array1[2,2] напечатает, сколько людей подключено между 1:00 и 2:00 к антенне 2 и т. Д.

Что я хочу сделать, так это для каждого user в df1 получить от array1, сколько всего людей подключено к одним и тем же антеннам за один и тот же период времени и поместить значение в столбец a.

Например, первый user подключен к антенне 3 с 00:00 до 1:00 и антенне 5 с 1:00 до 2:00, поэтому значение в a должно составлять array1[3,1] плюс array1[5,2]

Я использовал цикл for, чтобы сделать это

aux1 <- df1[,2]
aux2 <- df1[,3]
for(i in 1:length(df1$user)){
  df1[i,4] <- sum(array1[aux1[i],1],array1[aux2[i],2])
}

, что дает

   user h01 h02   a
1     1   3   5  92
2     2   3   5  92
3     3   6   3  47
4     4   8   4  92
5     5   9   1  49
6     6  10   2 156
7     7   4   8  16
8     8   1   8  28
9     9   2   9  42
10   10   5  10   7

Этот цикл работает и выдает правильные значения, проблема в том, что 2 набора данных (df1 и array1) действительно большие. df1 имеет более 20 000 пользователей и 24 периода времени, а array1 имеет более 1300 антенн, не говоря уже о том, что эти данные соответствуют пользователям с одного социально-экономического уровня, а у меня всего 5, поэтому упрощение кода является обязательным.

Я был бы рад, если бы кто-то мог показать мне другой подход к этому, особенно если это без цикла for.

1 Ответ

0 голосов
/ 03 сентября 2018

Попробуйте этот подход:

df1$a <- array1[df1$h01,1] + array1[df1$h12,2]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...