使用子功能对数据进行分组

时间:2014-04-27 06:50:56

标签: r grouping

我有一些事件的数据,如:

Year,   Date,      killed_min, killed_max, Injured_min, Injured_max
2000    4/3/2000      34          54          31         39
2000    6/4/2000      24          34          11         19
...

我面临两个主要问题:

  1. 按年度对这些事件进行分组或应用群集。此数据中有子功能,如最小值和最大值。我该如何处理它们?
  2. 数据中存在大量缺失值,这可能会影响对其应用群集。
  3. 我想通过参数来分组这些数据,例如年死亡或受伤的人等等。

1 个答案:

答案 0 :(得分:3)

data.table包非常适合第一个问题。 (data.tabledata.frame的进化版本,具有更多功能和速度。)

对于第二个问题,定义了一整类函数:na.rmna.action等。

这是一个玩具示例:

library(data.table)

set.seed(12345)
dt <- data.table(
  Year= sample(1980:2014,1000,replace=T), 
  Date= sample(1:10000, 1000, replace=T),     
  killed_min= sample(c(15:150,NA), 1000, replace=T),
  killed_max=sample(c(NA,250:1500), 1000, replace=T), 
  Injured_min=sample(150:250, 1000, replace=T), 
  Injured_max=sample(500:4000, 1000, replace=T))

dt # Note the missing value in row 996

dt[,list(killed_min=sum(killed_min,na.rm=TRUE),
         killed_max=sum(killed_max,na.rm=TRUE)),by=Year]

希望这会有所帮助!!


或者,您也可以在.SDcols lapply使用j,如下所示:

dt[, lapply(.SD, sum, na.rm=TRUE), by=Year, 
       .SDcols=c("killed_min", "killed_max")]