группировка данных в R - PullRequest
1 голос
/ 14 марта 2012

У меня есть этот фрейм данных, это ежедневные данные. На каждый день у меня есть свободное место для каждой файловой системы. Мне нравится это графически. Я думал поместить каждую файловую систему в отдельный столбец для создания R-графиков. Как я могу сделать это? Не перемещая их в свои столбцы, могу ли я создать диаграмму для каждой файловой системы на каждый день?

     Date     fileSystem FreeSpace
2011-12-03     /var          99.785
2011-12-03     /opt          30.494
2011-12-03     /tmp          55.643
2011-12-03     /data         37.846
2011-12-03     /ora          0.578
2011-12-04     /var          99.785
2011-12-04     /opt          30.494
2011-12-04     /tmp          55.643
2011-12-04    /data         37.846
2011-12-04     /ora          0.578

Ответы [ 3 ]

2 голосов
/ 15 марта 2012

С решеткой :: xyplot у вас есть много вариантов:

require(lattice)
xyplot(FreeSpace ~ Date + fileSystem, data=df1)
xyplot(FreeSpace ~ Date | fileSystem, data=df1)
xyplot(FreeSpace ~ Date , group= fileSystem, data=df1)
xyplot(FreeSpace ~ Date , group= fileSystem, data=df1, type="b")

решеточный эквивалент основания barplot равен barchart:

barchart(FreeSpace ~ Date | fileSystem, data=df1)
2 голосов
/ 14 марта 2012

Есть много возможностей для этого в R ... Как-то так? Однако, если вы хотите построить график для каждой файловой системы и каждый день, будет только один столбец (не надо, если это очень полезно ...).

df <- read.table(header = TRUE, text = "Date     fileSystem FreeSpace
                 2011-12-03     /var          99.785
                 2011-12-03     /opt          30.494
                 2011-12-03     /tmp          55.643
                 2011-12-03     /data         37.846
                 2011-12-03     /ora          0.578
                 2011-12-04     /var          99.785
                 2011-12-04     /opt          30.494
                 2011-12-04     /tmp          55.643
                 2011-12-04    /data         37.846
                 2011-12-04     /ora          0.578
                 ")

## using ggplot (dates are faceted)
require(ggplot2)
ggplot(df, aes(x = fileSystem, y = FreeSpace)) +
  geom_bar() +
  facet_wrap(~Date)

enter image description here

Edit: или в виде линейного графика. Почти все возможно в R, но вы должны подумать о том, какой сюжет вы хотите ...

df$Date <- strptime(df$Date, format="%Y-%m-%d")
ggplot(df, aes(x = Date, y = FreeSpace)) +
  geom_line() +
  facet_wrap(~fileSystem)

enter image description here

Edit2: Perhabs это? Здесь я делаю график для каждой файловой системы с циклом for. Сюжеты хранятся в списке.

# or as a line chart
df$Date <- strptime(df$Date, format="%Y-%m-%d")
plotlist <- vector(mode="list", length(levels(df$fileSystem)))
for(i in levels(df$fileSystem)){
  tempdf <- df[df$fileSystem == i, ]
  plotlist[[i]] <- ggplot(tempdf, aes(x = Date, y = FreeSpace)) +
    geom_line() +
    opts(title = i)
}
plotlist[["/data"]]
plotlist[["/var"]]
1 голос
/ 14 марта 2012

Ваши данные трудно читать в этом формате;Вот воспроизводимая версия:

DF <-
structure(list(Date = structure(c(15311, 15311, 15311, 15311, 
15311, 15312, 15312, 15312, 15312, 15312), class = "Date"), fileSystem = structure(c(5L, 
2L, 4L, 1L, 3L, 5L, 2L, 4L, 1L, 3L), .Label = c("/data", "/opt", 
"/ora", "/tmp", "/var"), class = "factor"), FreeSpace = c(99.785, 
30.494, 55.643, 37.846, 0.578, 99.785, 30.494, 55.643, 37.846, 
0.578)), .Names = c("Date", "fileSystem", "FreeSpace"), row.names = c(NA, 
-10L), class = "data.frame")

Я также покажу примеры с ggplot2:

library("ggplot2")
library("scales")

Это использует огранку сетки, а не перенос, как в ответе @ EDi.Один не более прав, чем другой;это зависит от того, что вы хотите.

ggplot(DF, aes(x=Date, y=FreeSpace)) +
  geom_point() +
  geom_line() +
  scale_x_date(breaks=date_breaks("1 day")) +
  facet_grid(fileSystem~.)

enter image description here

Ваш другой вопрос был о том, как изменить данные.

library("reshape2")

DF.wide <- dcast(DF, Date~fileSystem, value.var="FreeSpace")

, что дает

> DF.wide
        Date  /data   /opt  /ora   /tmp   /var
1 2011-12-03 37.846 30.494 0.578 55.643 99.785
2 2011-12-04 37.846 30.494 0.578 55.643 99.785

Отдельные столбцы могут быть построены по желанию, затем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...