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