如何根据R中的唯一ID汇总数据

时间:2015-03-18 17:41:26

标签: r analytics analysis modeling

我有一个非常大的数据集,包含大约3000个观察值和121个变量。每个观察包含有关电话的信息。每个设备都有一个唯一的IMEI,数据集中有重复的IMEI,因为一个设备可能有多个电话呼叫。

此数据最初是JSON格式的多个文件。每行都是一个单独的文件,所以我使用这个脚本使用jsonlite pckg导入JSON对象,然后使用rbind将它们全部绑定到一个大矩阵中,然后使用as.data.frame将其转换为数据帧( )功能。

    require(jsonlite)
    files <- list.files()
    DF <- NULL

    for (f in files) {

        DF <- rbind(DF, fromJSON(f))
     }

    DF<- as.data.frame(DF)

但是,我想根据每个UNIQUE IMEI总结数据。

例如:

IMEI 123456789有10个带变量call_duration,signal_strength,battery_level的条目。我想将10个条目汇总到一个条目汇总call_duration,并平均signal_strength和battery_level,结果将是:

   IMEI    call_duration(sum) signal_strength(mean) battery_level(mean)`

123456789     1982                    65               42

非常感谢。

2 个答案:

答案 0 :(得分:1)

您可以使用tapply计算平均值(或总和):

call_durationSUM <− tapply(X=DATA$call_duration, INDEX=DATA$IMEI, sum)
signal_strengthMEAN <− tapply(X=DATA$signal_strength, INDEX=DATA$IMEI, mean)
battery_levelMEAN <− tapply(X=DATA$battery_level, INDEX=DATA$IMEI, mean)

然后将它们捆绑在一起。

答案 1 :(得分:1)

tapply和data.table都是有用的命令。另一种可能性是使用sqldf包并输入SQL命令,如下所示:

# install.packages('sqldf') # If not already installed
# options(gsubfn.engine = "R") # needed for older version of R. Most will not need this

library(sqldf)
info <- sqldf('select IMEI, sum(call_duration) as sum_call_duration, 
    avg(signal_strength) as mean_signal_strength, 
    avg(battery_level) as mean_battery_level 
    from IMEIdatasetname group by IMEI')