我知道这可能很简单,但我无法解决。
我有以下df:
输入数据
df<-data.frame(id=c(1,2,3,3,3,4, 4, 4, 4, 4, 4), value = c(956, 986, 995, 995, 986, 700, 600, 995, 956, 1000, 986))
所需结果
df<-data.frame(id=c("1","2","3","3","3","4", "4", "4", "4", "4", "4"), value = c("956", "986", "995", "995", "986", "700", "600", "995", "956", "1000", "986"), median = c("956", "986","995","995", "995", "700","650","700","828", "956", "971"))
这是为了计算每行的中间值(考虑到不同的ID)。每行将添加一个新值,然后应计算一个新的中位数
输出数据
library(dplyr)
w = df %>%
group_by(id) %>%
mutate(median = median(value, na.rm =TRUE)) %>%
select (median)
df$median <- w[,2]
df<-data.frame(id=c("1","2","3","3","3","4", "4", "4", "4", "4", "4"), value = c("956", "986", "995", "995", "986", "700", "600", "995", "956", "1000", "986"), median = c("956", "986","995","995", "995", "971","971","971","971", "971", "971"))
您可以zoo::rollapplyr
用来计算滚动中位数:
library(tidyverse);
library(zoo);
df %>%
group_by(id) %>%
mutate(
median = rollapplyr(value, seq_along(value), median))
## A tibble: 11 x 3
## Groups: id [4]
# id value median
# <dbl> <dbl> <dbl>
# 1 1. 956. 956.
# 2 2. 986. 986.
# 3 3. 995. 995.
# 4 3. 995. 995.
# 5 3. 986. 995.
# 6 4. 700. 700.
# 7 4. 600. 650.
# 8 4. 995. 700.
# 9 4. 956. 828.
#10 4. 1000. 956.
#11 4. 986. 971.
df <- data.frame(
id = c(1,2,3,3,3,4, 4, 4, 4, 4, 4),
value = c(956, 986, 995, 995, 986, 700, 600, 995, 956, 1000, 986))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句