从数组到数据框获取数据

时间:2018-09-03 20:22:06

标签: arrays r dataframe

所以我有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中的值应为aarray1[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循环,我将很高兴。

1 个答案:

答案 0 :(得分:2)

尝试这种方法:

df1$a <- array1[df1$h01,1] + array1[df1$h12,2]