簡體   English   中英

如何基於R中的唯一ID匯總數據

[英]How to summarize data based on unique ID in R

我有一個非常大的數據集,其中包含約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

首先十分感謝。

您可以使用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)

然后將它們綁定在一起。

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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM