[英]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.