gpt4 book ai didi

database - 合并数据集中的多行

转载 作者:搜寻专家 更新时间:2023-10-30 19:46:00 25 4
gpt4 key购买 nike

我有一个包含大约 2000 万行的数据集,格式如下:

Userid attributid timeid
1 -1 0
1 -2 0
1 -3 0
1 -4 0
1 -5 0
...

以及将 attributeid 与四种属性类型之一相匹配的另一个索引:

attributeid attributetype
-1 A
-2 B
-3 C
-4 D
-5 B

我想通过将数据集转换为以下格式来将其批量导入到 neo4j 中:

UserID A     B      C     D     timeid
1 -1 -2,-5 -3 -4 0

我通过使用 userid 订购数据框并扫描它来尝试 R。但它太慢了。我想知道最省时的方法是什么?或者我可以做些什么来优化我的代码?这是我的代码:

names(node_attri)[1] = 'UserID'
names(node_attri)[2] = 'AttriID'
names(node_attri)[3] = 'TimeID'
names(attri_type)[1] = 'AttriID'
names(attri_type)[2] = 'AttriType'
#attri_type <- attri_type[order(attri_type),]
#node_attri <- node_attri[order(node_attri),]

N = length(unique(node_attri$TimeID))*length(unique(node_attri$UserID))
new_nodes = data.frame(UserID=rep(NA,N), employer=rep(NA,N), major=rep(NA,N),
places_lived=rep(NA,N), school=rep(NA,N), TimeID=rep(NA,N))
row = 0
start = 1
end = 1
M =nrow(node_attri)
while(start <= M) {
row = row + 1
em = ''
ma = ''
pl = ''
sc = ''
while(node_attri[start,1] == node_attri[end,1]) {
if (attri_type[abs(node_attri[end,2]),2] == 'employer')
em = paste(em, node_attri[end,2], sep=',')
else if (attri_type[abs(node_attri[end,2]),2] == 'major')
ma = paste(ma, node_attri[end,2], sep=',')
else if (attri_type[abs(node_attri[end,2]),2] == 'places_lived')
pl = paste(pl, node_attri[end,2], sep=',')
else if (attri_type[abs(node_attri[end,2]),2] == 'school')
sc = paste(sc, node_attri[end,2], sep=',')
end = end + 1
if (end > M) break
}
new_nodes[row,] = list(UserID=node_attri[start,1], employer=substring(em,2),
major=substring(ma,2), places_lived=substring(pl,2),
school=substring(sc,2), TimeID=node_attri[start,3])
start = end
end = start
}
new_nodes = new_nodes[1:row,]

最佳答案

您需要合并、聚合然后 reshape 。假设您的数据帧分别是 DFDF2:

x <- merge(DF, DF2)
y <- aggregate(attributeid~., data=x, FUN=function(x)paste(x, collapse=","))
z <- reshape(y, direction="wide", idvar=c("Userid","timeid"), timevar="attributetype")

结果:

> z
Userid timeid attributeid.A attributeid.B attributeid.C attributeid.D
1 1 0 -1 -5,-2 -3 -4

重命名和重新排列列是微不足道的。

关于database - 合并数据集中的多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18946131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com