r - 提取组中位数 n R 的行

标签 r sorting dataframe subset

如果我有一个如下所示的数据框:

v2 <- c(4.5, 2.5, 3.5, 5.5, 7.5, 6.5, 2.5, 1.5, 3.5) 
v1 <- c(2.2, 3.2, 1.2, 4.2, 2.2, 3.2, 2.2, 1.2, 5.2) 
lvl <- c("a","a","a","b","b","b","c","c","c") 
d <- data.frame(v1,v2,lvl) 

> d
   v1  v2 lvl
1 2.2 4.5   a
2 3.2 2.5   a
3 1.2 3.5   a
4 4.2 5.5   b
5 2.2 7.5   b
6 3.2 6.5   b
7 2.2 2.5   c
8 1.2 1.5   c
9 5.2 3.5   c

d$lvl 的每个级别中,我想提取值为 d$v1 为中值的行(对于最简单的情况,每个级别>d$lvl 有三行)。所以我想得到:

   v1  v2 l 
1 2.2 4.5 a 
6 3.2 6.5 b 
7 2.2 2.5 c 

最佳答案

对于行数为奇数的组,此方法有效。您需要考虑如何处理具有偶数行的组。例如,您可能希望向一个或另一个方向舍入中位数,请参阅?round

library(plyr)
d2 <- ddply(.data = d, .variables = .(lvl), function(x)
  x[which(x$v1 == median(x$v1)), ])

#    v1  v2 lvl
# 1 2.2 4.5   a
# 2 3.2 6.5   b
# 3 2.2 2.5   c

关于r - 提取组中位数 n R 的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18842894/

相关文章:

javascript - 在页面加载时,JavaScript sort() 中的参数变得未定义

Python - 为 csv/xls 文件生成 avro 模式

r - magrittr 中的习语 x <- x %>%

r - 使用 r 中的 dplyr 将函数应用于每个组的数据帧

python - knitr - 导入 python 模块时出错

python - 如何解决 Python Pandas DataFrame 的 "Out of bounds nanosecond timestamp"错误?

r - 每天汇总表值​

r - Shinyalerts : How do I know whether user pressed OK or Cancel?

sorting - boost 弹性聚集结果

algorithm - 快速排序与归并排序