根据列中的公共值将大数据帧拆分为数据帧列表

马丁·T

我有一个包含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)

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

当在原始的大数据帧甚至矩阵表示上应用时,这会使我的机器(4GB RAM,MacOSX 10.6,R 2.15)窒息而无法完成(我知道存在较新的R版本,但是我相信这不是主要问题) )。

似乎分割效果更好,并且经过很长时间才完成,但是我不知道(较差的R知识)如何将向量的结果列表分割成矩阵的向量。

path = split(smallsampleMat, smallsampleMat[,10]) 

我也考虑过使用big.matrixetc,但没有成功,这会加速该过程。

西蒙·奥汉隆

您可以使用例如轻松访问列表中的每个元素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 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

熊猫根据列值将数据帧分为多个csv

通过切片/拆分存储在列表中的字段宽度值,将apache-spark数据帧字符串列拆分为多个列

如何根据其他数据帧值拆分大数据帧?

将数据帧拆分为新数据帧时的命名

根据每个数据帧中的一个因素将数据帧列表拆分为多个列表

根据行是否包含字符串将数据帧拆分为多个数据帧

R-将大型数据帧并行拆分为列表

根据列名称将数据帧拆分为N个数据帧

如何通过列值的范围将单个数据帧拆分为多个数据帧?

根据R中的列名称将一个数据帧拆分为多个数据帧

R:如何根据单元格中的值将数据帧中的行拆分为多行?

如何将数据帧拆分为等长列表

按行号将数据帧拆分为数据帧列表

根据另一列中的分组,将csv文件/ pandas数据帧拆分为多个文件

根据条件将pyspark数据帧拆分为多个数据帧

根据R中的列值字符串将数据帧分为两个子数据帧

根据Pandas中的公共列将一个数据帧拆分为多个子数据帧

将数据帧拆分为 R 中的列子集列表

将大数据帧拆分为较小的相等数据帧

在条件下将大数据帧拆分为多个

如何根据行序列将数据帧拆分为多个数据帧

Pandas 按列值将数据帧拆分为两个数据帧 - 不使用 GroupBy

如何根据组将 pyspark 数据帧拆分为 2 个数据帧

如何根据 ID 将 Pandas 数据帧拆分为多个数据帧?

拆分后将大数据帧列表导出到 csv

在 R 中,根据拆分字符串中的内容将 1 列数据帧转换/拆分为 4 列

根据数据帧中的值重命名大型数据帧列表中的列

将数据帧拆分为子数据帧并根据相关数据帧填充内容?

R函数根据索引将数据帧拆分为多个数据帧