簡體   English   中英

R-使用with()和by()設置DF

[英]R - subsetting DF using with() and by()

今天是我參加R的第一天-您的建議會走很長一段路。

我正在嘗試根據預訂活動創建用戶的匯總視圖。

在預訂表中提取唯一的CustID。 為客戶創建新的DF。

customer <- with(BookingsDF,data.frame(CustID=sort(unique(CustID))))

將客戶已處理的次數添加到客戶表中的每個CustID。

customer <- cbind(customer, NumberOrders = with(BookingsDF, 
  as.numeric (by (id, CustID, function(x) length(unique(x))))))

這會生成一條錯誤消息

data.frame(...,check.names = FALSE)中的錯誤:參數暗示不同的行數:373545、391910

這沒有道理-2個查詢如何輸出不同的長度? 考慮到第一個查詢提取了唯一的CustID,第二個查詢提取了每個唯一的CustID預訂的次數。

謝謝。

最后:謝謝您的幫助。 我已將代碼更新為:

customer <- booked.dt[,{
  FirstPurchaseDate = .SD[which.min(CreatedDate)]
  LastPurchaseDate = .SD[which.max(CreatedDate)]
  NumberOrders = .N
  TotalAmount = sum(Price)
} , by = CustID]

不幸的是,這花費了很長時間。 因此,我必須通過SQL進行操作,然后將匯總數據上傳到R。

有許多軟件包可以解決此問題。 我更喜歡data.table 基本思想是拆分,計算和重新加入。 聲明一個data.table ,然后計算每個唯一客戶ID的行數並將其存儲在customer

在此示例中,請嘗試此

library(data.table)
bookings.DT <- data.table(BookingsDF)
customer <- bookings.DT[,.N,by="CustID"]

並且您應該在customer看到一個CustIDN的表。 這假定數據為長格式。 如果沒有,請參見reshape2

暫無
暫無

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

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