так что у меня есть 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.