【问题标题】:How can I subset rows from data.table with applying conditions by group?如何通过按组应用条件来对 data.table 中的行进行子集化?
【发布时间】:2021-12-23 03:25:34
【问题描述】:

我正在使用

baseT[
    Zone.Type=='response_button_text' & Spreadsheet.Row %in% which(sst$randomise_trials==1),
    Reaction.Time>(median(Reaction.Time)+3*mad(Reaction.Time)),
    by=c("Correct","Spreadsheet.Row")
    ]

提取反应时间大于中位数+3mad by 组(c("Correct","Spreadsheet.Row"))的行,但它不提供除by 参数中指定的列和结果列 - @987654325 之外的列@,如下所示:

      Correct Spreadsheet.Row    V1
   1:      -1               7 FALSE
   2:      -1               7 FALSE
   3:      -1               7 FALSE
   4:      -1               7 FALSE
   5:      -1               7 FALSE
  ---                              
1706:      -1              11 FALSE
1707:      -1              11 FALSE
1708:      -1              11 FALSE
1709:      -1              11 FALSE
1710:      -1              11 FALSE

我想要整行或至少另一个“ID”列。我认为有一个简单的语法解决方案。谁能给点提示?

【问题讨论】:

  • 请提供示例数据,以便我们可以看到您从什么开始,并在给定示例输入的情况下包括您的预期输出。请不要尝试发布所有 1710 行数据,一个子集就足够了,请确保 CorrectSpreadsheet.Row 有足够的可变性以使分组富有成效,每个分组可能有 2 个。 (要么发布来自dput(x) 的输出,要么使用data.table(...) 以编程方式生成数据。)谢谢。

标签: r data.table


【解决方案1】:

要在保留原始列的同时创建新列,请使用 := 语法:

a = as.data.table(mtcars)
a[mpg>20, mean_mpg := mean(mpg), by=carb]

     mpg cyl  disp  hp drat    wt  qsec vs am gear carb mean_mpg
 1: 21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4    21.00
 2: 21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4    21.00
 3: 22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1    26.55
 4: 21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1    26.55
 5: 18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2       NA
 6: 18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1       NA
 7: 14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4       NA
 8: 24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2    25.90

【讨论】:

    猜你喜欢
    • 2020-04-01
    • 2015-06-26
    • 2021-07-23
    • 2016-01-07
    • 2022-09-29
    • 1970-01-01
    • 2020-06-13
    • 1970-01-01
    • 2020-07-24
    相关资源
    最近更新 更多