gpt4 book ai didi

r - 基于较大 Data.Frame 的多个子集创建多个列表

转载 作者:行者123 更新时间:2023-12-04 22:05:54 24 4
gpt4 key购买 nike

在 R 中工作,我有与下面类似结构的数据(代码块 1)。我希望创建一个具有以下特征的新 data.frame:

对于每个唯一的 ID_1 值,我想要两个新列,一个包含 (ID_2s that share ID_1 & Direction==1) 的列表,另一列包含 (ID_2s that share ID_1 & Direction==0 的列表), (见下一个代码块 2)

数据集 block 1(初始):

ID_1    ID_2    Direction
100001 1 1
100001 11 1
100001 111 1
100001 1111 0
100001 11111 0
100001 111111 0
100002 2 1
100002 22 1
100002 222 0
100002 2222 0
100003 3 1
100003 33 1
100003 333 1
100003 3333 0
100003 33333 0
100003 333333 1
100004 4 1
100004 44 1

转换成:

数据集 block 2(所需输出):
ID_1    ID_2_D1             ID_2_D0
100001 1,11,111 1111,11111,111111
100002 2,22 222,222
100003 3,33,333,333333 3333,33333
100004 4,44

我有执行此操作的代码(获取子集子集的循环),但我在数百万个唯一的“ID_1”上运行它,这使得这非常耗时(我告诉你几个小时!!)。

有什么建议——也许使用 apply() 或 plyr() 包可以让它运行得更快?

引用代码:
DF <- data.frame(ID_1=c(100001,100001,100001,100001,100001,100001,100002,100002,100002,100002,100003,100003,100003,100003,100003,100003,100004,100004)
,ID_2=c(1,11,111,1111,11111,111111,2,22,222,2222,3,33,333,3333,33333,333333,4,44)
,Direction=c(1,1,1,0,0,0,1,1,0,0,1,1,1,0,0,1,1,1)
)

我当前(太慢)的代码:
  DF2 <- data.frame( ID_1=DF[!duplicated(DF$ID_1),][,1])

for (i in 1:length(unique(DF2$ID_1))){
DF2$ID_2_D1[i] <- list(subset(DF,ID_1==unique(DF2$ID_1)[i] & Direction==1)$ID_2)
DF2$ID_2_D0[i] <- list(subset(DF,ID_1==unique(DF2$ID_1)[i] & Direction==0)$ID_2)
}

最佳答案

像这样:

library(reshape2)
dcast(DF, ID_1 ~ Direction, value.var = "ID_2", list)
# ID_1 0 1
# 1 100001 1111, 11111, 111111 1, 11, 111
# 2 100002 222, 2222 2, 22
# 3 100003 3333, 33333 3, 33, 333, 333333
# 4 100004 4, 44

关于r - 基于较大 Data.Frame 的多个子集创建多个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15305507/

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