有没有办法将多行分组到一个新行?

时间:2018-03-28 14:36:39

标签: r sorting rows

您好我有许多具有不同类别类型的类似数据集。我已经决定将某些数据集中的哪些类别组合在一起以放入1个统一类别。我正在寻找一种方法将这些不同的行分组为一个统一的行。

例如,在数据集1中,它具有称为“刑事损害”的犯罪类型。

在我的数据集2中,我希望标题为“类别”的列中的“对财产造成恶意破坏”和“Arson”的行在一个新行中组合在一起,信息相同(省,站)但是类别列值为“刑事损害”,并将年份X2008 X2009等的值添加到一起,以便与我的其他数据集对齐。 同样的情况:居民房屋的入室盗窃和非住宅房屋的入室盗窃应归为“入室盗窃”。 还有:在酒精或毒品的影响下驾驶以及非法持有枪支和弹药应归为“其他值得注意的罪行”。

以下是需要转换的数据示例:

Province      Station Category           X2008 X2009 X2010 X2011 X2012 X2013
Kwazulu/Natal Phoenix Malicious damage to property 778 883 767 754 804 785
Kwazulu/Natal Phoenix Arson                        16  24  13  26  12  9

North West    Phokeng Malicious damage to property 243 235 154 187 153 156
North West    Phokeng Arson                        12  13  12  9   6   6

Eastern Cape Adelaide Burglary at residential premises     103 93 89 73 75 53
Eastern Cape Adelaide Burglary at non-residential premises 20 13 22 20 19 26

North West   Mogwase  Driving under the influence of alcohol or drugs 37 36 31 38 24 18
North West   Mogwase  Illegal possession of firearms and ammunition   18 8 12 12 12 13

要变成这样的东西:

Province      Station Category           X2008 X2009 X2010 X2011 X2012 X2013
Kwazulu/Natal Phoenix Criminal damage    794   897   780   780   816   794

North West    Phokeng Criminal damage    255   248   166   196   159   162

Eastern Cape Adelaide Burglary           123   106   111   93    94    79

North West   Mogwase  Other notable offences   55  44  43  50  36  31

任何帮助都会非常感激!我如此坚持如何去做这件事。谢谢!

2 个答案:

答案 0 :(得分:2)

我们可以group_by使用Category作为"刑事损害"`

library(dplyr)
df1 %>%
  group_by(Province, Station, Category = "Criminal damage") %>% 
  summarise_all(sum)
#A tibble: 2 x 9
# Groups: Province, Station [?]
#  Province      Station Category        X2008 X2009 X2010 X2011 X2012 X2013
#  <chr>         <chr>   <chr>           <int> <int> <int> <int> <int> <int>
#1 Kwazulu/Natal Phoenix Criminal damage   794   907   780   780   816   794
#2 North West    Phokeng Criminal damage   255   248   166   196   159   162

答案 1 :(得分:0)

一种方式(尽管可能效率不高)你可以通过重命名每个类别以匹配新的组合类别(请参阅this回答),然后使用group_by()进行分组,如akrun所说。

df1$Category[df1$Category == "Burglary at residential premises"] <- "Burglary"
df1$Category[df1$Category == "Burglary at non-residential premises"] <- "Burglary"

(依此类推)

然后使用dplyr的{​​{1}}查找每个省,地区和类别的所有犯罪的总和。