根据重量获取项目的频率[重复]

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核数时钟频率以及内存大小

根据元素的频率对数组进行排序

我想要一些关于如何根据元素频率对列表进行排序的帮助[重复]

如何检查同一数据框列中的重复值并通过根据频率删除行来应用 if 条件?

根据 PostgreSQL 中的频率获取日期的单词排名