【问题标题】:Subset data (columns) based on quantiles of column sums基于列总和的分位数的子集数据(列)
【发布时间】:2013-01-22 16:14:47
【问题描述】:

有没有一种聪明的方法可以根据列总和的分位数从数据框中选择列?例如,仅从数据框中选择列总和在第一个分位数中的列。我可以对基于数据的列总和进行子集化,并且可以计算列总和的分位数,但是有没有一种结合这些的好方法?谢谢。

# e.g. subset data - select columns whose column sums are less than 5
mydata <- mydata[,colSums(mydata) < 5]

# e.g create quantiles on colSums
mydata_cs <- colSums(mydata)
quart.mydata_cs <- quantile(mydata_cs,probs=seq(0,1, by=0.25))

【问题讨论】:

  • 将 5 替换为 quart.mydata_cs ,其中 quart.mydata_cs = quantile(mydata_cs, probs = 0.25) ?

标签: r dataframe subset


【解决方案1】:

使用您的mydata_cs,以下应该可以工作

mydata.firstquart <- mydata[,mydata_cs < quantile(mydata_cs,0.25)]

根据您的第一行代码,我假设“第一个四分位数”是指最低四分位数。如果您想要最高的四分位数,只需将其更改为

mydata.firstquart <- mydata[,mydata_cs > quantile(mydata_cs,0.75)]

您可能还想使用&lt;= 或&gt;= 而不是&lt; 和&gt;。

【讨论】:

    【解决方案2】:
     x <- c(1,2,3,4,5)
     y <- c(4,6,9,2,9)
     df <- data.frame(x,y)
     q <-  quantile(colSums(df),probs=seq(0,1, by=0.25))
     df[,colSums(df) < q[2] ,drop=FALSE]
    

    【讨论】:

      猜你喜欢
      • 2014-08-02
      • 2020-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-09
      相关资源
      最近更新 更多