我如何通过一个回调函数聚合(),返回多行?

  • 本文关键字:返回 回调 何通过 一个 函数 r
  • 更新时间 :
  • 英文 :


我从这里下载了一个化学性质的数据集。

我想过滤这个数据集。对于给定的化合物、相和压力,我只想要在测量值最低的温度以上进行的测量。

例如,对于比热容,我想要这样:

aggregate(
seq(nrow(data)),
list(data$phase, data$compound, data$p), 
function(ids) {  
subset = data[ids,]
subset[ subset$T > subset$T[  subset$Cp == min(subset$Cp)  ] ,]   
} 
)

然而,返回一些我无法理解的东西。如果要我猜的话,我会说它返回了一个数据框,其中一列中的单元格由向量填充,向量包含了我从回调函数返回的数据框的内容。

是否有任何方法我可以说服aggregate()调用rbind()上的数据帧由回调返回?除了aggregate()之外,我还应该使用其他功能吗?

这很蹩脚,但我确实找到了一种方法来解决这个问题,即从回调中返回一个id向量:

id.list = aggregate(
seq(nrow(data)),
list(data$phase, data$compound, data$p), 
function(ids) {  
subset = data[ids,]
ids[ subset$T > subset$T[  subset$Cp == min(subset$Cp)  ] ]   
}
)

返回一个数据帧,其中列x存储id的向量。

如果我选择那一列:

id.list$x

我得到一个向量列表,我从这个答案中学到它可以被平摊成一个向量:

stack(id.list$x)$values

是一个id向量。然后,我只从原始数据帧检索行:

data[stack(id.list$x)$values,]

所以整个代码是:

id.list = aggregate(
seq(nrow(data)),
list(data$phase, data$compound, data$p), 
function(ids) {  
subset = data[ids,]
ids[ subset$T > subset$T[  subset$Cp == min(subset$Cp)  ] ]   
}
)
answer = data[stack(id.list$x)$values,]

谁能想出更简洁的解决办法,我就把答案让给谁。

最新更新