Как фильтровать данные в R до или во время построения ggplot [duplicate]

Блок инициализатора определен внутри класса, а не как часть метода. Он выполняется для каждого объекта, созданного для класса. В следующем примере класс Employee определяет блок инициализатора:

class Employee { 
 { 
 System.out.println("Employee:initializer"); 
 } 
}
19
задан Brian Diggs 19 February 2013 в 22:21
поделиться

3 ответа

Вам нужно будет установить group, установив общее значение для тех точек, которые вы хотите подключить. Здесь вы можете установить первые 4 значения, чтобы сказать 1, а последние 2 - 2. И держите их в качестве факторов. То есть

df1$grp <- factor(rep(1:2, c(4,2)))
g <- ggplot(df1, aes(x=Date, y=Counts)) + geom_line(aes(group = grp)) + 
                     geom_point()

Изменить: после загрузки вашего data.frame вы можете использовать этот код для автоматического создания столбца grp:

idx <- c(1, diff(df$Date))
i2 <- c(1,which(idx != 1), nrow(df)+1)
df1$grp <- rep(1:length(diff(i2)), diff(i2))

Примечание: Важно также добавить geom_point(), потому что если discontinuous range является записью LAST в файле data.frame, она не будет отображаться (поскольку для подключения линии не должно быть 2 точки). В этом случае geom_point() построит график.

В качестве примера я создам данные с большим количеством пробелов:

# get a test data
set.seed(1234)
df <- data.frame(Date=seq(as.POSIXct("05:00", format="%H:%M"), 
                as.POSIXct("23:00", format="%H:%M"), by="hours"))
df$Counts <- sample(19)
df <- df[-c(4,7,17,18),]

# generate the groups automatically and plot
idx <- c(1, diff(df$Date))
i2 <- c(1,which(idx != 1), nrow(df)+1)
df$grp <- rep(1:length(diff(i2)), diff(i2))
g <- ggplot(df, aes(x=Date, y=Counts)) + geom_line(aes(group = grp)) + 
            geom_point()
g

ggplot2_groups [/g0]

Изменить: для ваших НОВЫХ данных (предполагается, что это df),

df$t <- strptime(paste(df$Date, df$Time), format="%d/%m/%Y %H:%M:%S")

idx <- c(10, diff(df$t))
i2 <- c(1,which(idx != 10), nrow(df)+1)
df$grp <- rep(1:length(diff(i2)), diff(i2))

теперь отображается с aes(x=t, ...).

16
ответ дан Arun 24 August 2018 в 06:26
поделиться

Ответ Джубы , чтобы включить явные NA, где вы хотите перерывы, - лучший подход. Ниже представлен альтернативный способ введения этих NA в нужном месте (без необходимости выяснять его вручную).

every.hour <- data.frame(Date=seq(min(Date), max(Date), by="1 hour"))
df2 <- merge(df1, every.hour, all=TRUE)
g %+% df2

enter image description here [/g1]

Вы можете сделать что-то подобное с вашим более поздним примером df, после изменения дат и времени в правильный формат

df$DateTime <- as.POSIXct(strptime(paste(df$Date, df$Time), 
                                   format="%m/%d/%Y %H:%M:%S"))
every.ten.seconds <- data.frame(DateTime=seq(min(df$DateTime), 
                                             max(df$DateTime), by="10 sec"))
df.10 <- merge(df, every.ten.seconds, all=TRUE)
3
ответ дан Community 24 August 2018 в 06:26
поделиться

Я думаю, что нет никакого способа для R или ggplot2 знать, есть ли где-то отсутствующая точка данных, кроме вас, чтобы указать ее с помощью NA. Таким образом, например:

df1 <- rbind(df1, list(strptime("07/12/2012 09:00:00", "%d/%m/%Y %H:%M"), NA))
ggplot(df1, aes(x=Date, y=Counts)) + geom_line(aes(group = 1))

enter image description here [/g0]

12
ответ дан juba 24 August 2018 в 06:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: