如何在R中拆分数据集和绘图

如何在R中拆分数据集和绘图,r,plot,split,lattice,R,Plot,Split,Lattice,我使用的数据集如下: 1 48434 14566 1 56711 6289 1 58826 4174 2 56626 6374 2 58888 4112 2 59549 3451 2 60020 2980 2 60468 2532 3 56586 6414 3 58691 4309 3 59360 3640 3 59941 3059 . . . 10 56757 6243 10 58895 4105 10 59565 3435 10

我使用的数据集如下:

1  48434  14566
1  56711  6289
1  58826  4174
2  56626  6374
2  58888  4112
2  59549  3451
2  60020  2980
2  60468  2532
3  56586  6414
3  58691  4309
3  59360  3640
3  59941  3059
.
.
.
10  56757  6243
10  58895  4105
10  59565  3435
10  60120  2880
10  60634  2366
我需要在第3列的R中为第一列的每个值绘制一个图,即对于上述数据,第3列的值将有10个不同的(每组1-10)图。x轴是迭代次数,Y轴是最大63000的值。我还需要用红色的线连接这些点。 我是R新手,一直在阅读文档,但这让我更加困惑。有人能帮忙吗

编辑:我实际上想要V3值的折线图。v3列的行数在x轴上,v3值在y轴上。我想要不同的图,每个图对应一个由v1表示的组。Chase的解决方案有效,但我希望轴移动,V3值应该在y轴上。以下是示例

EDIT2:@Roman,这是我正在执行的代码。

library(lattice)
d <- read.delim("c:\\proj58\\positions23.txt",sep="")
d <- do.call(rbind, lapply(split(d, d$V1), function(x) {
    x$iterations <- order(x$V3, decreasing=TRUE)
    x
}))
xyplot(V3 ~ iterations | V1, type="l", data=d)
我没有得到任何情节??我错过了什么 好的,明白了。不知道出了什么事。在这里

还有两件事,如何将框上的V1标签更改为实际数字,如1,2,。。。
其次,我有包含100个组的文件,我尝试了一个,它在一个页面上生成了所有的图形(显然不可读),我可以在多个窗口上生成这些图形吗?

我没有完全理解您想要绘制的内容,但这里有一种方法,可以让你走上正确的道路,你可以填写适当的绘图命令……或者澄清你的问题,更详细地解释绘图的最终结果

我们将利用两个包:
plyr
ggplot2
。我们将使用
plyr
将数据分成适当的组,然后使用
ggplot2
进行实际绘图。我们将利用
pdf()
函数,在每个页面上放置不同的绘图

library(ggplot2)
library(psych)    #For copying in data, not needed beyond that.

df <- read.clipboard(header = F)

pdf("test.pdf")
    d_ply(df, "V1", function(x)     #Split on the first column
        print(qplot(x$V3))          #Your plotting command should go here. This plots histograms.
    )
dev.off()                           #Close the plotting device.

首先,您需要为第一个变量的每个子集分别创建一个带有行号的变量。这里有一种方法,通过按第一个变量拆分数据集,生成一个具有行号的新变量,然后重新组合

您可能还希望V1成为一个因子(一个分类变量)

要使绘图显示在多个页面上,请使用
布局
选项限制页面上的绘图数量。为此,需要将绘图保存到支持多页输出的文件中。例如,对于5行5列:

trellis.device("pdf", file="myplot.pdf")
p <- xyplot(V3 ~ iterations | V1, type="l", data=d, layout=c(5,5))
plot(p)
dev.off()

当在控制台上运行时,这是不必要的,因为默认情况下,
绘图(实际上,
打印
函数)会被调用。

如Chase所说,请澄清您的问题,以便我们能够更好地设想您试图实现的目标。更让人困惑的是,这里有一个
lattice
大概的解决方案,我认为你可能在追求什么

library(lattice)
fdt <- data.frame(col1 = seq(from = 1, to = 10, each = 10),
        col2 = round(56 * rnorm(100, mean = 30, sd = 5)),
        col3 = round(20 * rnorm(100, mean = 11,)))
xyplot(col3 ~ 1:100 | col1, data = fdt)
库(晶格)

fdt呵呵,我们的想法几乎是一样的。不过,您可能更接近(使用~)右侧的V2)。有一个问题,其他文件中我的数据列V3并不总是按降序排列。它会上下移动。上面创建迭代的函数会导致错误的图形。我已将代码更改为仅使用行号。然而,依靠数据集始终保持相同的顺序通常不是一个好主意。当您创建数据集时,考虑存储迭代次数以及您所考虑的其他变量。非常感谢,这很有魅力。我已经用你的代码和ggplot2混合绘制了。没想到这么快就完成了:)这是可行的,但它在x轴上绘制v3值,在y轴上计数。我想换个方向。另外,我需要一个线图而不是条形图。thanx.我有数百万行数据,剪贴板无法容纳那么多数据,我如何能直接从文件中读取?@user-@Roman的链接是一个很好的起点。我会退一步(一两步),花一些时间熟悉R环境。您试图做的是一项相对简单的任务,但它结合了使用R环境的几个关键基本方面
read.table(“myFileHere”)
可能就是您想要的。至于情节,V2在情节中起作用了吗?连接数据点的顺序是什么?Thanx我读了上面的文档。我现在可以得到文件数据了。V2对于我来说是无用的数据。我们只是连接V3点
d <- do.call(rbind, lapply(split(d, d$V1), function(x) {
    x$iterations <- 1:nrow(x)
    x
}))
d$V1 <- factor(d$V1)
xyplot(V3 ~ iterations | V1, type="l", data=d)
trellis.device("pdf", file="myplot.pdf")
p <- xyplot(V3 ~ iterations | V1, type="l", data=d, layout=c(5,5))
plot(p)
dev.off()
p <- xyplot(...)
plot(p)
library(lattice)
fdt <- data.frame(col1 = seq(from = 1, to = 10, each = 10),
        col2 = round(56 * rnorm(100, mean = 30, sd = 5)),
        col3 = round(20 * rnorm(100, mean = 11,)))
xyplot(col3 ~ 1:100 | col1, data = fdt)