【发布时间】:2020-10-17 20:17:25
【问题描述】:
我有以下数据框:
numbers Freq
1 4 2
2 5 1
3 23 2
4 34 2
我知道当频率为 1 (median(`numbers`, na.rm = TRUE)) 时如何计算 r 中的中位数,但是当频率不同于 1 时如何计算?
【问题讨论】:
我有以下数据框:
numbers Freq
1 4 2
2 5 1
3 23 2
4 34 2
我知道当频率为 1 (median(`numbers`, na.rm = TRUE)) 时如何计算 r 中的中位数,但是当频率不同于 1 时如何计算?
【问题讨论】:
我们可以用!=创建一个逻辑索引,用它来子集“数字”列并得到median
with(df1, median(numbers[Freq != 1], na.rm = TRUE))
#[1] 23
数据
df1 <- structure(list(numbers = c(4L, 5L, 23L, 34L), Freq = c(2L, 1L,
2L, 2L)), class = "data.frame", row.names = c("1", "2", "3",
"4"))
【讨论】:
这是另一个使用 tapply 和 subset 的选项
> with(subset(df,Freq != 1),tapply(numbers,Freq,median,na.rm = TRUE))
2
23
数据
> dput(df)
structure(list(numbers = c(4L, 5L, 23L, 34L), Freq = c(2L, 1L,
2L, 2L)), class = "data.frame", row.names = c("1", "2", "3",
"4"))
【讨论】: