2015-07-01 172 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