首页 > 解决方案 > data.table 中的替代方案

问题描述

这是我每次想在 data.frame 中创建新列时通常会做的事情,新列是应用于我的 data.frame 的不同子集的函数的结果。

您认为在 R 中使用 data.table 包获得相同结果的最佳方法是什么?

干杯!

> class(DF)
[1] "data.frame"
> names(DF)
[1] "sp"  "X1"  "X2"

paramsVal <- c(0.32, 0.23, 8.28, 8.37)


DF <- split(DF, DF$sp)

DF <- lapply(seq_along(DF), function(X){

    Data <- DF[[X]]

    if(unique(X$sp) == "SP1"){
    Data$Pred <- fakeFunction(Data = Data,
                              param1 = paramsVal[1],
                              param2 = paramsVal[3])
    }else{
        Data$Pred <- fakeFunction(Data = Data,
                                  param1 = paramsVal[2],
                                  param2 = paramsVal[4])
    }

    return(Data)
})

DF <- do.call("rbind", DF)

names(DF)
[1] "sp"  "X1"  "X2"  "Pred"

标签: rdataframedata.table

解决方案


data.table我会这样做:

DT = as.data.table(DF)
DT[sp == "SP1", Pred := fakeFunction(Data = .SD, param1 = paramsVal[1], param2 = paramsVal[3])]
DT[sp != "SP1", Pred := fakeFunction(Data = .SD, param1 = paramsVal[2], param2 = paramsVal[4])]

我认为这应该可行,但是如果没有可重复的示例,我将无法进行测试。如果您需要更多帮助,请提供 (a) 数据的副本/可粘贴样本(每行仅几行SP1,不SP1用于重现性),以及 (b) 、和其他所需dput()的替代品要运行的示例。fakeFunctionparmsVal


推荐阅读