【发布时间】:2016-03-31 14:16:28
【问题描述】:
我收到一个错误,我认为根本原因是在我的分组中,并非所有组都具有值。
数据可以在这里下载:https://opendata.miamidade.gov/311/311-Service-Requests-Miami-Dade-County/dj6j-qg5t
我想要做的是有一个函数,它采用嵌套分组并检测所有孔并填充零。让我们看下面的代码示例:
d <- rDSamp %>%
FilterDateRange("Ticket.Created.Date...Time", "1/1/2013", "12/31/2013") %>%
group_by(Ticket.Created.Date...Time, Case.Owner) %>%
summarise(
count = n()
) %>%
arrange(Ticket.Created.Date...Time)
在汇总之后,我需要添加一个遍历每个日期的函数,如果该日期不存在案例所有者,则创建案例所有者,并添加计数为 0。
这里是到达这一点的代码:
library("ggvis")
library("magrittr")
library("dplyr")
library("tidyr")
library("shiny")
library("checkpoint")
checkpoint("2016-03-29")
rData <- read.csv("C:\\data\\Miami_311.csv",
header=TRUE,
sep=",")
rDSamp <- rData[sample(1:length(rData$Case.Owner), 1000),]
rDSamp = rData %>%
subset(
Case.Owner == "Animal_Services" |
Case.Owner == "Waste_Management" |
Case.Owner == "Community_Information_and_Outreach" |
Case.Owner == "Waste_Management")
rDSamp$Case.Owner = factor(rDSamp$Case.Owner)
#Convert to known date time
rDSamp$Ticket.Created.Date...Time <-
rDSamp$Ticket.Created.Date...Time %>%
as.POSIXct(format="%m/%d/%Y") %>%
as.character()
FilterDateRange = function(data, feature, minDate, maxDate) {
minDate = minDate %>%
as.POSIXct(format="%m/%d/%Y") %>%
as.character()
maxDate = maxDate %>%
as.POSIXct(format="%m/%d/%Y") %>%
as.character()
result = subset(data, data[feature] <= maxDate)
subset(result, result[feature] >= minDate)
}
d <- rDSamp %>%
FilterDateRange("Ticket.Created.Date...Time", "1/1/2013", "12/31/2013") %>%
group_by(Ticket.Created.Date...Time, Case.Owner) %>%
summarise(
count = n()
) %>%
arrange(Ticket.Created.Date...Time)
对于最终信息,我正在尝试使用 ggvis layer_smooths,它报告 na 是由强制引入的,我的假设是数据中的漏洞导致了这种情况。
找到了一种解决方案,正在寻找更通用的解决方案...
FillDataHolesWithZeros = function(input){
countZero = input %>%
group_by(Ticket.Created.Date...Time) %>%
summarise(count = n()) %>%
filter(count < length(levels(input$Case.Owner)))
for(i in 1:nrow(countZero))
{
date = countZero[i,]$Ticket.Created.Date...Time
departments = input %>% filter(Ticket.Created.Date...Time == date)
myLevels = levels(input$Case.Owner)
for(j in 1:nrow(departments))
{
owner = departments[j,]$Case.Owner
myLevels = myLevels[myLevels != owner]
}
print(paste(i,":",myLevels))
for(k in 1:length(myLevels)){
input = input %>% rbind(data.frame(
Ticket.Created.Date...Time = date,
Case.Owner = myLevels[k],
count = 0
))
}
}
return(input)
}
【问题讨论】:
-
闪亮标签,因为它为闪亮的可视化提供动力,引发错误。平滑图正在消亡。
-
对于 NA 问题,在我尝试执行绘图之前,我的数据框没有 NA。问题是数据框是完整的,但是如果您按日期分组,则某些案例所有者根本没有行,因为当天没有为该部门拨打电话。我需要弄清楚如何在所有者不存在的情况下添加行。
-
所以只显示问题,你有 data.frame 和 date 列,你有所有可能的日期(或间隔)的列表,并且想要向 data.frame 添加行?
-
我有以下功能/列:日期、CaseOwner、CallCount。我已按日期、CaseOwner(按此顺序)分组。当我在数据集上执行 loess 时,它失败了,就像在某些日期一样,存在不存在行的洞。示例:1/2/2013, AnimalService, 3 - 1/3/2013, AnimalService, 4 - 1/3/2013 WateManagement, 4, - 1/3/2013 OutReach, 5 我需要在 1/2 中添加 2 行/2013 年,WasteManagement 和 OutReach 为零,但我的因素可以动态变化。
-
最后一项,将行添加到分组中是理想的。
标签: r shiny data-manipulation