2013-10-09 4 views
0

Я хочу построить несколько файлов на одном чертеже; каждый файл имеет данные из двух столбцов.Построение данных с использованием векторов разной длины в R

Проблема заключается в том, что каждый файл имеет разное количество строк (529,567,660 и т.д.)

Для данных с одинаковым числом строк я сделал следующее:

data1 <- read.table(file="ro0.2/T0.1/sq_Ave.dat") 
    x1 <- data1[1] 
    y1 <- data1[2] 
    data2 <- read.table(file="ro0.4/T0.1/sq_Ave.dat") 
    x2 <- data2[1] 
    y2 <- data2[2] 

    max_valuex = max(x1,x2,x3,x4,x5) 
    max_valuey = max(y1,y2,y3,y4,y5) 
    matplot(x1,cbind(y1,y2,y3,y4,y5),type="l", 
     col=c("black","red","green","blue","orange"), 
     lwd = 2,xlab = expression(q*sigma), ylab="S(q)", col.lab="black", 
     cex.lab=1.5,font.lab=4, xaxt = "n", yaxt = "n", xlim = c(0,max_valuex), 
     ylim = c(0,max_valuey), xaxs = "i", yaxs = "i") 

Однако, это не работает для файлов с различным количеством строк.

R жалуется:

Error in data.frame(..., check.names = FALSE) : 
arguments imply differing number of rows: 529, 567, 661 
Calls: matplot -> ncol -> as.matrix -> cbind -> cbind -> data.frame 

Любая идея или предложение было бы весьма признателен!

спасибо заранее

S H-V

+1

Если он будет «работать», то вы должны сказать, как данные должны быть организованы при отображаются неравные элементы длины. (Вам нужно будет либо выровнять ваши векторы в матрице, либо использовать 'lines'. –

+1

Привет и Добро пожаловать в stackoverflow! Поскольку вы новичок в SO, пожалуйста, найдите время [о Stackoverflow] (http://stackoverflow.com)/about) и [как спросить] (http://meta.stackoverflow.com/help/how-to-ask). У вас гораздо больше шансов получить полезный ответ, если вы предоставите [минимальный, воспроизводимый набор данных] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610#5963610) вместе с кодом, который вы пробовали. Спасибо! – Henrik

ответ

1

Я думаю, вы могли бы enlarg свои векторы с NA с. Я считаю, что это не будет иметь значения при последующей обработке ваших данных. Например .:

a= 1:10 
    b=1:5 
    d=1:7 

    data.frame(a,b,d) #different length 
    #Error in data.frame(a, b, d) : 
    #arguments imply differing number of rows: 10, 5, 7 

    length(b) = length(d) = length(a) 

    data.frame(a,b,d) # no error now 

     a b d 
    1 1 1 1 
    2 2 2 2 
    3 3 3 3 
    4 4 4 4 
    5 5 5 5 
    6 6 NA 6 
    7 7 NA 7 
    8 8 NA NA 
    9 9 NA NA 
    10 10 NA NA 
1

Даже если вам удастся загрузить данные по оси Y в объект списка, который был бы естественным типом данных в R для хранения векторов переменной длины. На следующем шаге вы получите что-то вроде:

> matplot (matrix(1:100, nrow=10, ncol=10)[1], matrix(1:100, nrow=12, ncol=10)) 
Error in matplot(matrix(1:100, nrow = 10, ncol = 10)[, 1], matrix(1:100, : 
'x' and 'y' must have same number of rows 

как сюжет рассеивания или matplot Нуждается й, у кортежей, но в коде вы только с помощью x1 как х значений. Ваш пример кода не завершен. Вы также загружаете x2, x3, ... , но используете их только для вычисления xlim. Почему вы вычисляете xlim, включая максимумы всех x, если вы не собираетесь их строить?

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

Может быть, вы хотите построить несколько линий-графиков в одну фигуру, используя add=TRUE:

matplot(data1[,1:2], xlim = c(0,max_valuex), ylim = c(0,max_valuey)) 
matplot(data2[,1:2], add=TRUE) 
+0

Привет, Майкл, Спасибо за ваш –

+0

Привет, Майкл, Спасибо за ваш ответ! На самом деле мне хотелось бы знать, как я могу построить несколько строк в одной фигуре. Моя проблема в том, что я не знаю, как обрабатывать x-данные для каждого файла (x1 , x2, x3, x4, x5). Каждый файл имеет данные физического наблюдаемого.И-значения совершенно разные. Значения x очень похожи [0, ~ 16], но раздел другой. Разделение по оси x является причиной наличия различного количества строк для каждого файла. Я просто хочу визуализировать каждый график (xi, yi) на одной фигуре. Но я не могу понять, как это сделать. Благодаря! –

Смежные вопросы