我有两个数据集,第一个是数据帧
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
的蜂窝电话天线的id,h12
表示相同但在1:00AM和2:00AM之间
然后我有一个数组
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))
行表示蜂窝电话天线id,列表示时间段,array1
中的值表示在该时间段有多少人连接到天线。因此,array1[1,1]
将打印在00:00到1:00之间连接到天线1的人数,array1[2,2]
将打印在1:00到2:00之间连接到天线2的人数,依此类推。
我想要做的是,对于df1
中的每个user
,从array1
获取在同一时间段内连接到相同天线的总人数,并将值放在a
列中。
例如,第一个user
在00:00到1:00AM之间连接到天线3,天线5在1:00AM和2:00AM之间连接,因此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
这个循环工作并给出了正确的值,问题是两个数据集(df1
和array1
)真的很大。df1
有超过20.000个用户和24个时段,array1
有超过1300个天线,更不用说这个数据对应于来自一个社会经济水平的用户,我总共有5个,所以简化代码是强制性的。
如果有人能向我展示一种不同的方法,我会很高兴,特别是如果它没有一个for循环。
发布于 2018-09-04 04:42:43
尝试以下方法:
df1$a <- array1[df1$h01,1] + array1[df1$h12,2]
https://stackoverflow.com/questions/52155831
复制相似问题