【问题标题】:Summarize number of cases in category and calculate new column汇总类别中的案例数并计算新列
【发布时间】:2016-10-27 04:11:43
【问题描述】:

我有一个具有以下结构的数据集

zip code |type of crime
------   |------
1002     |crime1
1002     |crime1
1002     |crime2
1002     |crime1
9210     |crime1
9210     |crime1
9210     |crime2
9210     |crime2

我也有每个罪行的最低刑期清单

crime |  minimum sentence (days)
------| ------
crime1|10
crime2|15

使用这两个表,我想做以下事情:

  1. 计算每个街区的每宗犯罪总数

    zip code | crime    |number of crimes
    ------   | ------   |-----
    1002     |  crime1  | 3
    1002     |  crime2  | 1
    9210     |  crime1  | 2
    9210     |  crime2  | 2
    
  2. 将每个罪行乘以它的最低刑期,然后按社区计算总天数。

    zip  | crime  | crimexdays
    ---- | ------ | -----
    1002 | crime1 | 30
    1002 | crime2 | 15
    9210 | crime1 | 20
    9210 | crime2 | 30
    

我真的很感激这里的任何帮助。干杯!!

【问题讨论】:

  • 我觉得你可以用table
  • 你能显示crimexdays的计算吗?
  • 跟随你的话而不是你的数字,df %>% count(zip.code, type.of.crime) %>% mutate(crime.x.sentence = n * df2[df2$crime == type.of.crime, 2])
  • 谢谢,阿克伦。对不起,我在原来的帖子中犯了一个错误,我已经更正了。但要回答这个问题:犯罪 1 的最低刑期是十天。所以 zip 1002 中有 3 个犯罪 1。所以 crimexdays=30

标签: r dplyr


【解决方案1】:

使用countleft_join 和第二个数据集和trasmute 获取频率以创建新列

df1 %>% 
     count(zipcode, typeofcrime) %>% 
     left_join(., df2, by = c("typeofcrime" = "crime")) %>% 
     transmute(typeofcrime, crimexsentence = n*minimumsentence) 
#     zipcode typeofcrime crimexsentence
#     <int>       <chr>          <int>
#1    1002      crime1             30
#2    1002      crime2             15
#3    9210      crime1             20
#4    9210      crime2             30

【讨论】:

  • 改成crimexsentence = n * minimumsentence吧?
猜你喜欢
  • 2019-08-18
  • 1970-01-01
  • 2021-10-09
  • 2020-01-02
  • 1970-01-01
  • 1970-01-01
  • 2021-11-08
  • 2014-04-09
  • 1970-01-01
相关资源
最近更新 更多