2015-07-01 121 views
0

我想插入一个数据帧到数据帧元素,例如,如果我叫:df1[1,1]我会得到:[R插入数据帧/列表到数据帧元

[A B] 
[C D] 

我认为这是可能的R但也许我错了。在我的一个项目中,我主要使用50x50矩阵,我希望每个元素都包含包含数字和标签行的数据列。

试图做类似df1[1,1] <- df2产生以下警告

警告消息: 在[<-.data.frame*tmp*,I,J,=值列表(DJN.10 = C(0,3,: 更换元件1具有144行更换1个行

,并呼吁df1[1,1]产量0。我试着插入以各种方式中的数据,与as.vector()as.list()没有成功。

最佳,

+0

是否必须是一个'data.frame'? '矩阵'可以吗? – erasmortg

+0

也许这个'multitable'包可以用于这种情况。 – RHertel

回答

3

也许matrix可以为你工作,像这样:

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" 

详见here

+1

哦,很酷。我不知道'[[i,j]]'存在。尽管它正在讨论链接的线程,它似乎没有文档... – Frank

1

您的data.frame中的每一列可以是list。只要确保列表的长度与data.frame中的行数一样长即可。

可以使用标准$表示法添加列。

例子:

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