R中的分组数据

R中的分组数据,r,R,我有这个数据框,这是一个每日数据。对于每一天,我都为每个文件系统提供了可用空间。我喜欢把这个画出来。我在考虑将每个文件系统放在自己的列中,以创建R图。我该怎么做呢。如果不将它们移动到各自的列中,我是否可以每天为每个文件系统创建一个图表 Date fileSystem FreeSpace 2011-12-03 /var 99.785 2011-12-03 /opt 30.494 2011-12-03 /tmp

我有这个数据框,这是一个每日数据。对于每一天,我都为每个文件系统提供了可用空间。我喜欢把这个画出来。我在考虑将每个文件系统放在自己的列中,以创建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

这在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)
编辑: 或者作为折线图。在R中几乎一切都是可能的,但你必须考虑你想要什么样的情节

df$Date <- strptime(df$Date, format="%Y-%m-%d")
ggplot(df, aes(x = Date, y = FreeSpace)) +
  geom_line() +
  facet_wrap(~fileSystem)
编辑2: 这是什么?这里,我用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"]]

这在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)
编辑: 或者作为折线图。在R中几乎一切都是可能的,但你必须考虑你想要什么样的情节

df$Date <- strptime(df$Date, format="%Y-%m-%d")
ggplot(df, aes(x = Date, y = FreeSpace)) +
  geom_line() +
  facet_wrap(~fileSystem)
编辑2: 这是什么?这里,我用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"]]

您的数据很难以这种格式读取;这是一个可复制的版本:

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")
这使用网格刻面,而不是像@EDi的答案中那样包装。一个并不比另一个更正确;这取决于你想要什么

ggplot(DF, aes(x=Date, y=FreeSpace)) +
  geom_point() +
  geom_line() +
  scale_x_date(breaks=date_breaks("1 day")) +
  facet_grid(fileSystem~.)
你的另一个问题是如何重塑数据

library("reshape2")

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

然后,可以根据需要绘制各个列。

您的数据很难以该格式读取;这是一个可复制的版本:

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")
这使用网格刻面,而不是像@EDi的答案中那样包装。一个并不比另一个更正确;这取决于你想要什么

ggplot(DF, aes(x=Date, y=FreeSpace)) +
  geom_point() +
  geom_line() +
  scale_x_date(breaks=date_breaks("1 day")) +
  facet_grid(fileSystem~.)
你的另一个问题是如何重塑数据

library("reshape2")

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

可以根据需要打印各个列。

使用lattice::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")
基本条形图的晶格等效物为条形图:


使用lattice::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")
基本条形图的晶格等效物为条形图:


这是一个很好的方法,但是我需要为每个文件系统查看所有可用日期的一个图表。我非常感谢。我得到了这个错误:if lengtrange==1 | | diffrange==0中的错误{:缺少值,其中需要TRUE/FALSE。我希望将每个文件系统放在自己的列上,以便能够以这种方式绘制单独的图形。我可能不希望查看每个图形中的某些图形。您的错误可能是由于数据帧的格式不相同。类字符的日期列还是日期列?strdf将显示差异,这对于不同类型的图形很重要。请参阅,我的编辑。代码适用于您提供的示例数据。如果出现错误,则示例数据不代表您的真实数据。如果您希望您的数据采用宽格式,可以使用Reforme2包:requirereshape2;dcastdf,Date~filesystem这是一种不错的方法,但我不这么认为ed希望看到所有可用日期的每个文件系统的一个图表。我真的很感激。我得到了这个错误:if lengtrange==1 | | diffrange==0中的错误{:缺少值,其中需要TRUE/FALSE。我希望将每个文件系统放在自己的列上,以便能够以这种方式绘制单独的图形。我可能不希望查看每个图形中的某些图形。您的错误可能是由于数据帧的格式不相同。类字符的日期列还是日期列?strdf将显示差异,这对于不同类型的图形很重要。请参阅,我的编辑。代码适用于您提供的示例数据。如果出现错误,则示例数据不代表您的真实数据。如果您希望数据采用宽格式,可以使用Reforme2包:requirereshape2;dcastdf,Date~fileSystem