redvyper
redvyper

Reputation: 137

R Inserting a Dataframe/List into a Dataframe Element

I'd like to insert a dataframe into a dataframe element, such that if I called:df1[1,1] I would get:

[A B]
[C D]

I thought this was possible in R but perhaps I am mistaken. In a project of mine, I am essentially working with a 50x50 matrix, where I'd like each element to contain column of data containing numbers and labeled rows.

Trying to do something like df1[1,1] <- df2 yields the following warning

Warning message: In [<-.data.frame(*tmp*, i, j, value = list(DJN.10 = c(0, 3, : replacement element 1 has 144 rows to replace 1 rows

And calling df1[1,1] yields 0 . I've tried inserting the data in various ways, as with as.vector() and as.list() to no success.

Best,

Upvotes: 0

Views: 4333

Answers (2)

A5C1D2H2I1M1N2O1R2T1
A5C1D2H2I1M1N2O1R2T1

Reputation: 193517

Each column in your data.frame can be a list. Just make sure that the list is as long as the number of rows in your data.frame.

Columns can be added using the standard $ notation.

Example:

x <- data.frame(matrix(NA, nrow=2, ncol=3))

x$X1 <- I(list(data.frame(a=c("A","C"), b=c("B","D")), matrix(1:10, ncol = 5)))
x$X2 <- I(list(data.frame(c = 2:3), list(1, 2, 3, 4)))
x$X3 <- I(list(list("a", "b", "c"), 1:5))

x
#             X1         X2           X3
# 1     1:2, 1:2        2:3      a, b, c
# 2 1, 2, 3,.... 1, 2, 3, 4 1, 2, 3,....
x[1, 1]
# [[1]]
#   a b
# 1 A B
# 2 C D
# 
x[2, 1]
# [[1]]
#      [,1] [,2] [,3] [,4] [,5]
# [1,]    1    3    5    7    9
# [2,]    2    4    6    8   10

Upvotes: 1

erasmortg
erasmortg

Reputation: 3278

Perhaps a matrix could work for you, like so:

x <- matrix(list(), nrow=2, ncol=3)
print(x)
#     [,1] [,2] [,3]
#[1,] NULL NULL NULL
#[2,] NULL NULL NULL
x[[1,1]] <- data.frame(a=c("A","C"), b=c("B","D"))
x[[1,2]] <- data.frame(c=2:3)
x[[2,3]] <- data.frame(x=1, y=2:4)
x[[2,1]] <- list(1,2,3,5)
x[[1,3]] <- list("a","b","c","d")
x[[2,2]] <- list(1:5)
print(x)
#     [,1]   [,2]   [,3]  
#[1,] List,2 List,1 List,4
#[2,] List,4 List,1 List,2
x[[1,1]]
#  a b
#1 A B
#2 C D
 class(x)
#[1] "matrix"
 typeof(x)
#[1] "list"

See here for details.

Upvotes: 4

Related Questions