【问题标题】:R script, how to group_by and max on factor values?R脚本,如何对因子值进行分组和最大值?
【发布时间】:2021-06-15 00:47:42
【问题描述】:

出于报告目的,我有一个定义如下的数据框:

Data:
V df_ischemia 12 obs. of 2 variables
  record_id : 'labelled' chr "1001" "1001" "1001" "1001" "1002" ...
  ..- attr(*, "label")= chr "Patient number"
  ischemic: Factor w/ 2 levels "Unchecked","Checked": NA NA 1 1 NA 2 NA 1 NA 2 ...
  ..- attr(, "redcapLabels")= chr [1:2] "Unchecked" "Checked"
  ..- attr(, "redcapLevels")= int [1:2] 0 1
  ..- attr(, "label")= chr "Complication(s): Ischemia"

真实的数据框有几百行,但对于这个例子,假设它只有 12 行,如下所示:

   | record_id  | ischemic
 1 | 1001       | NA
 2 | 1001       | NA
 3 | 1001       | Unchecked
 4 | 1001       | Unchecked
 5 | 1002       | NA
 6 | 1002       | Checked
 7 | 1003       | NA
 8 | 1003       | Unchecked
 9 | 1004       | NA
10 | 1004       | Checked
11 | 1004       | Checked
12 | 1004       | Checked

目标是将其分组为具有“已检查”值的患者,因此预期输出应如下所示:

  | record_id  | ischemic
1 | 1002       | Checked
2 | 1004       | Checked

我想只使用group_bymax

df_ischemia <- group_by(record_id) %>% max(df_ischemia$ischemic)
# Error object 'record_id' not found

df_ischemia <- group_by(df_ischemia$record_id) %>% max(ischemic)
# no applicable method for 'group_by_' applied to an object of class "c('labelled', 'character')"

df_ischemia <- group_by(record_id) %>% summarise(df_ischemia$ischemic=max(df_ischemia$ischemic))
# Error: unexpected '=' ..

但这不起作用,但是该因子确实具有 int 值,因此应该可以设置最大值(?)。我在某处读到应该订购该因素。看起来它是有序的,但不知道如何检查是否是这种情况,或者如何设置现有因子的顺序。

【问题讨论】:

    标签: r group-by rscript


    【解决方案1】:

    在第一种情况下我们需要summarise

    library(dplyr)
    df_comp_lrcsp %>% 
       group_by(record_id) %>% 
        summarise(Max =  comp_lrcsp___1[which.max(as.integer(comp_lrcsp___1))]) )
    

    &lt;- 位于错误的位置,即group_by 应用于列“record_id”而不指定数据“df_comp_lrcsp”,分组后,max 应用于完整列“comp_lrscp__1”。此外,由于链的原因,提取可能不适用于在其顶部应用的函数。

    在第二个代码中,没有数据的相同问题和没有summarisemax 应用。最后,我们在提取整列时遇到了“数据”未找到问题。 $ 提取完整列打破分组

    【讨论】:

    • 感谢您的快速回答,但我已经尝试过了,它给出了这个错误Problem with 'summarise()' input 'Max'. x 'max' not meaningful for factors
    • @BdR 你可以试试Max = comp_lrcsp___1[which.max(as.integer(comp_lrcsp___1))])
    • @BdR 您在寻找last 级别,然后使用last(levels(comp_lrcsp___1))
    猜你喜欢
    • 2021-12-31
    • 2020-11-10
    • 2021-03-22
    • 2021-11-30
    • 1970-01-01
    • 2011-03-19
    • 2018-07-20
    • 2020-05-28
    • 2020-04-04
    相关资源
    最近更新 更多