【问题标题】:Problems with ddply for splitting a large number of categories in Rddply 在 R 中拆分大量类别的问题
【发布时间】:2011-12-05 19:00:43
【问题描述】:

我最近问了一个关于计算元素自身重复次数的问题(http://stackoverflow.com/questions/7669553/how-to-assign-number-of-repeats-to-dataframe-based- on-elements-of-an-identifying/7669607#7669607)在大型数据框中。我收到了一些非常有用的建议,这些建议适用于少数行,但现在需要在更大的级别上执行操作(超过 255k 行,使用 ddply 形成大约 100k“组”):

system.time( data <- ddply(data, "uid", function(x) {x$time <- 1:nrow(x); x}) ) #uid is the grouping variable, for which I need to count the number of repeats for output like

uid    time
ny1    1
ny1    2
ny2    1
ny2    2
ny2    3

由于内存问题,尝试在较大的数据集上执行此操作会导致 R 阻塞。有什么明显的解决方案吗?在此先感谢(特别是耐心等待,因为我是一个新的“程序员”)。

【问题讨论】:

    标签: r transform plyr large-data


    【解决方案1】:

    对于此类真正的大问题,您可以尝试使用data.tables 而不是plyr

    library(data.table)
    data <- data.table(data)
    
    data[,transform(.SD,time = NROW(.SD)), by = uid]
    

    假设time 列不存在。

    我仍在学习data.table,所以当我对此进行修改时,似乎这可能更简单(而且可能更快):

    data[,rep(.N, .N),by = uid]
    

    .N 出现在一个内部变量中,表示每个子组的行数。

    【讨论】:

    • 我有兴趣使用 system.time() 来针对我的解决方案运行它。我也需要学习/使用 data.table 进行更多工作,我怀疑它只为 255k 行提供任何好处,除非有一堆列...
    【解决方案2】:

    我在这里 How to assign number of repeats to dataframe based on elements of an identifying vector in R? 发布了对您原来问题的新答案。

    希望对您有所帮助。

    【讨论】:

    • 第二种解决方案适用于我面临的特定问题;我将使用 data.table 并回复您,因为我怀疑这种类型的事情会在不同的应用程序中再次出现。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-08
    • 1970-01-01
    • 2012-12-19
    相关资源
    最近更新 更多