gpt4 book ai didi

r - 使用 Data.Table 有条件地选择组中的行

转载 作者:行者123 更新时间:2023-12-04 12:02:32 26 4
gpt4 key购买 nike

我正在寻找使用 data.table 的解决方案——我有一个包含以下列的 data.table:

data <- data.frame(GROUP=c(3,3,4,4,5,6),
YEAR=c(1979,1985,1999,2011,2012,1994),
NAME=c("S","A","J","L","G","A"))

data <- as.data.table(data)

数据表:
GROUP  YEAR    NAME
3 1979 Smith
3 1985 Anderson
4 1999 James
4 2011 Liam
5 2012 George
6 1994 Adams

对于每个组,我们要使用以下规则选择一行:
  • 如果年份 > 2000,则选择年份最小的行 以上 2000.
  • 如果没有年份 > 2000,请选择年份最大的行。

  • 期望的输出:
    GROUP  YEAR    NAME
    3 1985 Anderson
    4 2011 Liam
    5 2012 George
    6 1994 Adams

    谢谢!我已经为此苦苦挣扎了一段时间。

    最佳答案

    data.table如果您对特殊的 .I 进行子集化,应该会简单得多行计数器:

    library(data.table)
    setDT(data)
    data[
    data[
    ,
    if(any(YEAR > 2000))
    .I[which.min(2000 - YEAR)] else
    .I[which.max(YEAR)],
    by=GROUP
    ]$V1
    ]
    # GROUP YEAR NAME
    #1: 3 1985 A
    #2: 4 2011 L
    #3: 5 2012 G
    #4: 6 1994 A

    感谢@r2evans 提供背景信息 -

    .I is an integer vector equivalent to seq_len(nrow(x)).
    Ref: http://rdrr.io/cran/data.table/man/special-symbols.html



    所以,我在这里所做的就是获取整个 data 的匹配行索引。对于每个 by= 处的每个计算等级。然后使用这些行索引对 data 进行子集化再次。

    关于r - 使用 Data.Table 有条件地选择组中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53255897/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com