r - 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"
解决方案
,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()
的替代品要运行的示例。fakeFunction
parmsVal
推荐阅读
- python - 在 Python 中按列表中的多个字段排序
- c++ - 在 VS 2019 16.8.5 中使用 Bosma 编译时出错
- excel - 如何在单个excel单元格中创建日期范围
- swiftui - 如何将页脚视图添加到 SwiftUI 中的列表?
- python - 如何将一个包含多个单词的字符串拆分成一个包含一定数量单词的字符串的列表?
- maven - 使用 maven liquibase 比较相同数据库模式的两种状态
- php - 条件为真时退出三元运算符
- machine-learning - 如何使用信息增益 (IG) 编码朴素贝叶斯
- c - 如何在 Linux 子系统中的 VSCode 上运行程序集 (.s) 文件
- asp.net - ASP.NET Webforms Repeater 在按钮单击/回发时无法正确加载自定义控件