首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从数组获取数据到dataframe

从数组获取数据到dataframe
EN

Stack Overflow用户
提问于 2018-09-04 04:22:06
回答 1查看 55关注 0票数 0

我有两个数据集,第一个是数据帧

代码语言:javascript
运行
复制
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之间

然后我有一个数组

代码语言:javascript
运行
复制
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循环来做这件事

代码语言:javascript
运行
复制
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])
}

这给了我们

代码语言:javascript
运行
复制
   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

这个循环工作并给出了正确的值,问题是两个数据集(df1array1)真的很大。df1有超过20.000个用户和24个时段,array1有超过1300个天线,更不用说这个数据对应于来自一个社会经济水平的用户,我总共有5个,所以简化代码是强制性的。

如果有人能向我展示一种不同的方法,我会很高兴,特别是如果它没有一个for循环。

EN

回答 1

Stack Overflow用户

发布于 2018-09-04 04:42:43

尝试以下方法:

代码语言:javascript
运行
复制
df1$a <- array1[df1$h01,1] + array1[df1$h12,2]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52155831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档