如果我有一个如下所示的数据框:
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/