【问题标题】:R: select specific rows in data.tableR:选择 data.table 中的特定行
【发布时间】:2015-05-16 21:54:17
【问题描述】:

我在选择 data.table 中的行时遇到了一些具体问题,但到目前为止还没有解决。我有一个数据集存储一系列参数的模拟结果。数据集中的列包含参数或结果值,请参见下面的代码(“p”表示参数列,“v”表示值列。

# create dataset for demonstration
params <- expand.grid (seq(0,0.5,by=.1),
                       seq(1,10),
                       seq(100,105),
                       letters[1:4],
                       letters[10:14])
colnames(params) <- paste("p",1:5,sep="")
data <- data.table(cbind(params,runif(nrow(params)),rnorm(nrow(params))))
setnames(data, c(colnames(params),"v1","v2"))

我现在想提取:对于每个 p1,对于给定的 p2 和 p3 值,以及对于 p4、p5 的任意值,v1 的值最小的行。 让 np4 和 np5 是 p4 和 p5 的唯一值的数量,对于每个唯一的 p1 和给定的 p2、p3,我想在 p1、p2、p3 与 v1 最小的一行匹配的 np4*np5 行中进行选择. 然后,所需的输出应该是一个从原始表中选择 np1 行的表,即包含原始表中的所有变量。我知道如何从 data.table 中选择行,如何使用表达式和“by”,但我还没有设法将所有这些放在一起以产生所需的结果。

更新:我找到了答案。诀窍是,如何在“by?”创建的子集中选择最佳行?(当然,已经有一个内置的)解决方案:

np4 <- c("a", "b")
np5 <- c("m", "n")

ss2 <- data[ p4 %in% np4 & p5 %in% np5,
            .SD[which(v1==min(v1)),],
             by = "p1"]

来自 data.table 文档:

.SD 是一个 data.table,其中包含每个组的 x 数据的子集,不包括 by(或 keyby)中使用的任何列。

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    这应该可以工作

    np4 <- c("a", "b")
    np5 <- c("m", "n")
    data[p4 %in% np4 & p5 %in% np5,
         list(v1 = min(v1), v2 = v2[which.min(v1)]),
         by = c("p1", "p2", "p3", "p4", "p5")]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-08
      • 2012-09-20
      • 2022-01-01
      • 2011-08-16
      • 2019-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多