所以我有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
ID,h01
代表在一段时间(00:00-1 :00AM)和user
代表相同,但介于1:00 AM和2:00 AM之间。
然后我有一个数组
h12
行代表手机天线ID,列代表时间段,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
将打印在00:00和1:00之间连接到天线1的人数,array1[1,1]
将打印1:00和2:00之间连接到天线2的人数,等等上。
我想做的是从array1[2,2]
中获取user
中的每个df1
,在相同的时间段内总共有多少人连接到相同的天线并放置该值在array1
列中。
例如,第一个a
在00:00和1:00 AM之间连接到天线3,天线5在1:00 AM和2:00 AM之间连接,因此user
中的值应为a
加array1[3,1]
我使用了for循环
array1[5,2]
给出
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])
}
此循环有效并提供了正确的值,问题在于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
和df1
)确实很大。 array1
拥有20.000个用户和24个时间段,df1
拥有1300多个天线,更不用说此数据对应于一个社会经济水平的用户,我总共有5个,因此简化了代码是必填项。
如果有人可以向我展示一种不同的方法,特别是如果它没有for循环,我将很高兴。
答案 0 :(得分:2)
尝试这种方法:
df1$a <- array1[df1$h01,1] + array1[df1$h12,2]