我是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
然后我想我应该尝试自己编写一个执行以下步骤的函数。
每组:
但后来我陷入了如何找到中间(或两个中间)行......
您对如何解决有任何建议吗?任何帮助将不胜感激!