Как разбить набор данных и построить в R - PullRequest
3 голосов
/ 20 января 2011

Я использую набор данных как:

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

Мне нужен график в R третьего столбца для каждого значения первого столбца, т. Е. Для приведенных выше данных будет 10 разных графиков (каждая группа 1-10) значений третьего столбца. Ось X - это число итераций, а ось Y - это значения с максимумом 63000. Мне также нужно соединить точки линией красного цвета. Я новичок в R и читаю документацию, но это смутило меня больше. Может ли тело помочь PLZ.

РЕДАКТИРОВАТЬ: Я действительно хочу линейный график значений V3. количество строк столбца v3 будет на оси x, а значения v3 на оси y. И мне нужны разные графики для каждой группы, обозначенной v1. Решение Чейза работает, за исключением того, что я хочу, чтобы ось сместилась, значения V3 должны быть на оси Y. Вот пример alt text

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)

Это ошибка, которую я получаю,

    > 
>  source("C:\\proj58\\plots2.R")
> d
       V1    V2    V3 iterations
1.1     1 48434 14566          1
1.2     1 56711  6289          2
1.3     1 58826  4174          3
1.4     1 59528  3472          4

Я не получаю никакого заговора ?? что мне не хватает Хорошо понял. не знаю, что было не так. Вот оно,

alt text

Еще 2 вещи, как изменить метки V1 на полях на реальные цифры, такие как 1,2, ... во-вторых, у меня есть файлы, которые содержат 100 групп, я попробовал одну, и все графики на одной странице были сделаны (очевидно, нечитаемыми), могу ли я сделать их более чем в одном окне?

Ответы [ 3 ]

2 голосов
/ 20 января 2011

Ну, во-первых, вам нужно создать переменную с номером строки, для каждого подмножества первой переменной в отдельности.Вот один из способов сделать это: разделить набор данных по первой переменной, создать новую переменную с номером строки и рекомбинировать.

Вы также, вероятно, хотите, чтобы V1 был фактором (категориальной переменной).

d <- do.call(rbind, lapply(split(d, d$V1), function(x) {
    x$iterations <- 1:nrow(x)
    x
}))
d$V1 <- factor(d$V1)

Затем, используя библиотеку lattice, вы сделаете что-то вроде

xyplot(V3 ~ iterations | V1, type="l", data=d)

Чтобы графики появлялись на более чем одной странице, ограничьте количество графиков настраница с использованием опции layout.Для этого вам нужно сохранить график в файл, который поддерживает многостраничный вывод.Например, для 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()

Кроме того, чтобы график отображался при выполнении кода с использованием source, вам необходимо специально отобразить вывод команды xyplot, например

p <- xyplot(...)
plot(p)

При работе на консоли это не обязательно, поскольку по умолчанию вызывается plot (ну, собственно, функция print).

1 голос
/ 20 января 2011

Как сказал Чейз, уточните ваш вопрос, чтобы мы могли лучше представить, чего вы пытаетесь достичь. Чтобы добавить к куче путаницы, вот 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)

alt text

0 голосов
/ 20 января 2011

Я не совсем понимаю, что именно вы хотите построить, но вот подход, который должен помочь вам выбрать правильный путь, и вы можете заполнить соответствующую команду построения ... или уточнить свой вопрос и объяснить, чтоКонечный результат вашего сюжета должен выглядеть более подробно.

Мы собираемся воспользоваться двумя пакетами: 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.

Это создаст n страницу PDF, где n представляет количество групп в V1 (ваш столбец разделения).Если вы предпочитаете выводить JPEG, посмотрите? Jpeg или другие графические опции для создания других выходов.

РЕДАКТИРОВАТЬ: Как вы видите, люди интерпретировали ваш вопрос несколькими способами.Если решение @ Roman больше, чем вы хотите, вот примерно такой же код ggplot

qplot(col2, col3, data = fdt, geom = "point") + facet_wrap(~ col1 , nrow = 2)
...