如何根据R中的中值选择行?

时间:2017-12-04 15:47:43

标签: r median

我是R的新手,无法想出这个。假设我有一个包含四列的数据框。第一列确定组成员资格,第二列应用于过滤,最后两列应该跟随。它将如下所示:

> test.data
group filter a b
first      1 1 2
first      2 3 1
first      3 2 3
second     1 2 1
second     2 2 5
second     3 3 1
second     4 3 1

对于每个组,我想计算过滤器列中的中位数。然后,在a和b列中应使用相同的行,必要时计算两行的平均值,或者如果行数为奇数则返回一行。

结果应为:

group filter     a     b
first      2     3     1
second   2.5   2.5     3

使用dplyr时,我可以独立于过滤柱计算每列的中位数,但不考虑过滤柱:

median.data <- test.data %>% group_by(group) %>% summarise_all(funs(median))
> median.data
group filter     a     b
first    2.0   2.0     2
second   2.5   2.5     1

使用tapply时,我可以计算中位数,但不知道如何考虑其他列:

median.data <- tapply(test.data$filter, test.data$group, median)
> median.data
first second 
2.0   2.5 

然后我想我应该尝试自己编写一个执行以下步骤的函数。

每组

  1. 按列排序&#34;过滤&#34;
  2. 提取中间行,如果连
  3. 则提取两行
  4. 计算平均值
  5. 但后来我陷入了如何找到中间(或两个中间)行......

    您对如何解决有任何建议吗?任何帮助将不胜感激!

0 个答案:

没有答案