gpt4 book ai didi

r - 根据列中的共同值将大数据框拆分为数据框列表

转载 作者:行者123 更新时间:2023-12-01 16:15:38 27 4
gpt4 key购买 nike

我有一个包含 10 列的数据框,收集“用户”的操作,其中一列包含一个 ID(不是唯一的,标识用户)(第 10 列)。数据帧的长度约为 750000 行。我正在尝试提取由包含“用户”标识符的列拆分的单个数据帧(因此获取数据帧的列表或向量),以隔离单个参与者的操作。

ID | Data1 | Data2 | ... | UserID
1 | aaa | bbb | ... | u_001
2 | aab | bb2 | ... | u_001
3 | aac | bb3 | ... | u_001
4 | aad | bb4 | ... | u_002

导致
list(
ID | Data1 | Data2 | ... | UserID
1 | aaa | bbb | ... | u_001
2 | aab | bb2 | ... | u_001
3 | aac | bb3 | ... | u_001
,
4 | aad | bb4 | ... | u_002
...)

以下对我来说在一个小样本(1000行)上非常有效:
paths = by(smallsampleMat, smallsampleMat[,"userID"], function(x) x)

然后例如通过路径[1]访问我想要的元素。

当应用于原始的大型数据帧甚至矩阵表示时,这会阻塞我的机器(4GB RAM,MacOSX 10.6,R 2.15)并且永远不会完成(我知道存在更新的 R 版本,但我相信这不是主要问题)。

似乎 split 性能更高,并且在很长一段时间后完成,但我不知道(劣质 R 知识)如何将结果向量列表拼凑成矩阵向量。
path = split(smallsampleMat, smallsampleMat[,10]) 

我也考虑过使用 big.matrix等等,但没有太大的成功来加快这个过程。

最佳答案

您可以使用例如轻松访问列表中的每个元素path[[1]] .您不能将一组矩阵放入原子向量并访问每个元素。矩阵是具有维度属性的原子向量。我会使用 split 返回的列表结构,这就是它的设计目的。每个列表元素都可以保存不同类型和大小的数据,因此用途非常广泛,您可以使用 *apply函数进一步对列表中的每个元素进行操作。下面的例子。

#  For reproducibile data
set.seed(1)

# Make some data
userid <- rep(1:2,times=4)
data1 <- replicate(8 , paste( sample(letters , 3 ) , collapse = "" ) )
data2 <- sample(10,8)
df <- data.frame( userid , data1 , data2 )

# Split on userid
out <- split( df , f = df$userid )
#$`1`
# userid data1 data2
#1 1 gjn 3
#3 1 yqp 1
#5 1 rjs 6
#7 1 jtw 5

#$`2`
# userid data1 data2
#2 2 xfv 4
#4 2 bfe 10
#6 2 mrx 2
#8 2 fqd 9

使用 [[ 访问每个元素像这样的运算符:
out[[1]]
# userid data1 data2
#1 1 gjn 3
#3 1 yqp 1
#5 1 rjs 6
#7 1 jtw 5

或使用 *apply函数对每个列表元素进行进一步的操作。例如,取 data2 的平均值您可以像这样使用 sapply 列:
sapply( out , function(x) mean( x$data2 ) )
# 1 2
#3.75 6.25

关于r - 根据列中的共同值将大数据框拆分为数据框列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18527051/

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