根据重量获取项目的频率[重复]
Posted
技术标签:
【中文标题】根据重量获取项目的频率[重复]【英文标题】:Fetch the frequency of a item on the basis of weight [duplicate] 【发布时间】:2018-06-27 11:00:34 【问题描述】:我有以下数据:
item Date weights
1 camera 2018-01-05 1.0000
2 laptop 2018-01-05 1.0000
3 laptop 2018-01-05 1.0000
4 computer 2018-01-05 1.0000
5 mobile 2017-12-25 0.9000
6 mobile 2017-12-25 0.9000
7 camera 2017-12-25 0.9000
8 camera 2017-12-25 0.9000
9 mobile 2017-12-15 0.8100
10 mobile 2017-12-15 0.8100
11 mobile 2017-12-15 0.8100
12 mobile 2017-12-15 0.8100
13 camera 2017-12-10 0.7290
14 camera 2017-12-05 0.6561
我想根据weight
获取item的频率:
例如:
以weight
为基础的Camera
频率应该是:
(1+.9+.9+.729+.6561)/14
【问题讨论】:
【参考方案1】:使用 dplyr 可以:
item <- c('camera', 'camera', 'laptop', 'camera', 'laptop', 'camera')
weights <- c(1, 0.5, 1, 0.9, 0.8, 0.7)
df <- data.frame(item, weights)
library(dplyr)
df %>% group_by(item) %>% summarise(mean = sum(weights)/nrow(df))
结果:
A tibble: 2 x 2
item mean
<fctr> <dbl>
1 camera 0.5166667
2 laptop 0.3000000
【讨论】:
【参考方案2】:与dplyr
:
library(dplyr)
df %>%
group_by(item) %>%
summarise(freq = sum(weights) / nrow(.))
# A tibble: 4 x 2
item freq
<chr> <dbl>
1 camera 0.299
2 computer 0.0714
3 laptop 0.143
4 mobile 0.360
要在汇总时删除缺失值,您可以将链中的第三行修改为:
summarise(freq = sum(weights, na.rm = TRUE) / nrow(.))
【讨论】:
【参考方案3】:使用data.table
:
library(data.table)
# assuming your data object is called df, we turn it into a data.table
setDT(df)
df[, sum(weights) / nrow(df), by = item]
item V1
1: camera 0.29893571
2: laptop 0.14285714
3: computer 0.07142857
4: mobile 0.36000000
在base R
:
aggregate(weights ~ item, data = df, FUN = function(x) sum(x) / nrow(df))
item weights
1 camera 0.29893571
2 computer 0.07142857
3 laptop 0.14285714
4 mobile 0.36000000
【讨论】:
data.table
解决方案可能是最快的以上是关于根据重量获取项目的频率[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何获取 Android 设备的CPU核数时钟频率以及内存大小