【问题标题】:Calculating median based on segments in r [duplicate]根据r中的段计算中位数[重复]
【发布时间】:2017-07-31 13:40:27
【问题描述】:

您好,我想根据我们通过另一列得到的部分来计算某些值的中位数。初始数据结构如下:

Column A    Column B  
559         1  
559         1  
322         1  
661         2  
661         2  
662         2  
661         2  
753         3  
752         3  
752         3  
752         3  
752         3  
328         4  
328         4  
328         4  

计算的中位数将基于 A 列,输出如下所示:

Column A    Column B    Median
559         1           559
559         1           559
322         1           559
661         2           661
661         2           661
662         2           661
661         2           661
753         3           752
752         3           752
752         3           752
752         3           752
752         3           752
328         4           328
328         4           328
328         4           328

中位数是根据 A 列和 B 列的相同值集计算的。例如,我们应该计算 A 列的所有值的中位数,其中 B 列的值相同,并将它们粘贴到 Median 列中。

我需要在 r 中执行此操作,但无法破解它。有没有办法通过 dplyr 或任何其他包来做到这一点?

谢谢

【问题讨论】:

  • 除了下面的答案,使用dplyr你可以做df %>% group_by(column2) %>% mutate(median = median(column1))
  • 由于某种原因这不起作用,我收到以下错误Error in mutate_impl(.data, dots) : incompatible types, expecting a integer vector

标签: r multiple-columns median


【解决方案1】:

您可以使用library(data.table),然后将您的data 放入data.table

dt <- as.data.table(data) dt[,Median:=median('Column A'),by="Column B"]

【讨论】:

    【解决方案2】:

    在这里,以基本 R 和 data.table 方式完成。提前道歉 - 我的基本 r 方法可能有点麻烦 - 我不经常使用它。

    exampleData=data.frame(A=runif(10,0,10),B=sample(2,10,replace=T))
    
    
    # Data.frame option
    exampleData$Median=tapply(exampleData$A,exampleData$B,median)[as.character(exampleData$B)]
    
    # Data.table option
    library(data.table)
    exampleData=data.table(exampleData)
    exampleData[,Median_Data_Table_Way:=median(A),by=B]
    

    【讨论】:

      猜你喜欢
      • 2014-10-07
      • 1970-01-01
      • 2015-07-28
      • 1970-01-01
      • 2015-10-01
      • 2016-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多