[R] vector entry in matix

arun smartpink111 at yahoo.com
Thu Jul 5 18:57:42 CEST 2012


Hi,
I think it is better to store vectors in to list when the vectors are of different lengths.

#Consider these cases,
#vectors of equal length

set.seed(1)
 list1<-list(a=rnorm(5,15),b=rnorm(5,25),c=1:5,d=runif(5,0.4),e=16:20,f=rep(1,5))

mat1<-cbind(rbind(list1[[1]],list1[[2]],list1[[3]]),(rbind(list1[[4]],list1[[5]],list1[[6]])))
mat1
         [,1]     [,2]     [,3]     [,4]     [,5]       [,6]       [,7]
[1,] 16.43302 16.98040 14.63278 13.95587 15.56972  0.5371949  0.7574272
[2,] 24.86495 27.40162 24.96076 25.68974 25.02800 16.0000000 17.0000000
[3,]  1.00000  2.00000  3.00000  4.00000  5.00000  1.0000000  1.0000000
           [,8]       [,9]      [,10]
[1,]  0.7449233  0.4462386  0.4213243
[2,] 18.0000000 19.0000000 20.0000000
[3,]  1.0000000  1.0000000  1.0000000

dat1<-data.frame(list1)

dat1
         a        b c         d  e f
1 16.43302 24.86495 1 0.5371949 16 1
2 16.98040 27.40162 2 0.7574272 17 1
3 14.63278 24.96076 3 0.7449233 18 1
4 13.95587 25.68974 4 0.4462386 19 1
5 15.56972 25.02800 5 0.4213243 20 1
#vectors of uneual length
#works with list

list2<-list(a=rnorm(5,15),b=rnorm(10,25),c=5:15,d=runif(3,0.4),e=1:5,f=rep(1:3,3))
> list2
$a
[1] 15.36594 15.24841 15.06529 15.01916 15.25734

$b
 [1] 24.35099 24.88083 25.66414 26.10097 25.14377 24.88225 24.08793 23.56241
 [9] 24.20291 26.25408

$c
 [1]  5  6  7  8  9 10 11 12 13 14 15

$d
[1] 0.8679909 0.9283714 0.6478745

$e
[1] 1 2 3 4 5

$f
[1] 1 2 3 1 2 3 1 2 3


#Warning or Errors in matrix and dataframe
mat2<-cbind(rbind(list2[[1]],list2[[2]],list2[[3]]),(rbind(list2[[4]],list2[[5]],list2[[6]])))
Warning messages:
1: In rbind(list2[[1]], list2[[2]], list2[[3]]) :
  number of columns of result is not a multiple of vector length (arg 1)
2: In rbind(list2[[4]], list2[[5]], list2[[6]]) :
  number of columns of result is not a multiple of vector length (arg 2)


  dat2<-data.frame(list2)
Error in data.frame(a = c(15.3659411230492, 15.2484126488726, 15.0652881816716,  : 
  arguments imply differing number of rows: 5, 10, 11, 3, 9

#So, it would be better to store it as a list.

#But, you can still convert vectors of unequal lengths to data frame or matrix with NAs.
library(zoo)
a<-zoo(1:8,1:14)
b<-zoo(5:8,3:5)
c<-zoo(1:5,2:5)
 list3<-list("a","b","c")
 z<-zoo()
 for(i in 1:length(list3)) z<-merge(z,get(list3[[i]]))
 names(z)<-unlist(list3)
 z
   a  b  c
1  1 NA NA
2  2 NA  1
3  3  5  2
4  4  6  3
5  5  7  4
6  6 NA NA
7  7 NA NA
8  8 NA NA
9  1 NA NA
10 2 NA NA
11 3 NA NA
12 4 NA NA
13 5 NA NA
14 6 NA NA
 z1<-data.frame(z)
is.data.frame(z1)
[1] TRUE
 str(z1)
'data.frame':    14 obs. of  3 variables:
 $ a: int  1 2 3 4 5 6 7 8 1 2 ...
 $ b: int  NA NA 5 6 7 NA NA NA NA NA ...
 $ c: int  NA 1 2 3 4 NA NA NA NA NA ...
z2<-as.matrix(z)

A.K.




----- Original Message -----
From: Thomas C. <thomas.csapak at gmail.com>
To: r-help at r-project.org
Cc: 
Sent: Thursday, July 5, 2012 9:19 AM
Subject: [R] vector entry in matix

hi,

i'm trying to figure out if there's any possibility to write a whole vector
into a matrix or data.frame or something like that. i don't mean
transormation. Here an example:

       [,1]  [,2]
[1,] "a" "d"
[2,] "b" "e"
[3,] "c" "f"


where e.g.  a is a<-c(0,1) vector of length 2, b a vector of length 4,... (i
know that the matrix enties are strings :)). i'm trying to put some
variables into a matrix or data.frame, but i couldn't handle it. is
something like that possible in R?

thanks for your help!

--
View this message in context: http://r.789695.n4.nabble.com/vector-entry-in-matix-tp4635478.html
Sent from the R help mailing list archive at Nabble.com.

______________________________________________
R-help at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list