2014-11-09 32 views
0

一個data.frame的成分這不起作用分配data.frame如在中的R

> dfi=data.frame(v1=c(1,1),v2=c(2,2)) 
> dfi 
    v1 v2 
1 1 2 
2 1 2 
> df$df=dfi 
Error in `$<-.data.frame`(`*tmp*`, "df", value = list(v1 = c(1, 1), v2 = c(2, : 
    replacement has 2 rows, data has 0 

df$df=I(dfi)具有相同的錯誤。請幫忙。

謝謝。

+0

究竟是什麼你想實現什麼?如果你想將dfi的內容傳遞給df,使用下面的代碼:df < - data.frame(matrix(vector(),0,2,dimnames = list(c(),c(「V1」,「V2」)) ),stringsAsFactors = F) df = dfi – Docconcoct 2014-11-09 00:36:38

+3

包含數據幀的數據幀是非常不尋常的事情,R中幾乎沒有任何內容會被設計爲使用該格式的數據結構。 – joran 2014-11-09 00:42:55

+0

它可能是列表的一部分,雖然這很常見。非常確定你知道這一點。 – KFB 2014-11-09 01:16:22

回答

0

提出這項意見,從格式化的原因:

究竟是你想達到什麼目的?如果你想DFI傳遞的df,您可以使用此代碼的內容:

df <- data.frame(matrix(vector(), 0, 2, dimnames=list(c(), c("V1", "V2"))), stringsAsFactors=F) 

df=dfi 
0

由於@joran說,爲什麼你會永遠要做到這一點還不清楚。儘管如此,這是可能的。

數據框的要求之一是所有的列都有相同的行數。這就是你遇到錯誤的原因。像這樣將工作:

dfi <- data.frame(v1=c(1,1),v2=c(2,2)) # 2 rows 
df <- data.frame(x=1:2)    # also 2 rows 
df$df <- dfi        # works now 

印刷會導致你相信df有三列...

df 
# x df.v1 df.v2 
# 1 1  1  2 
# 2 2  1  2 

,但它不會!

str(df) 
# 'data.frame': 2 obs. of 2 variables: 
# $ x : int 1 2 
# $ df:'data.frame': 2 obs. of 2 variables: 
# ..$ v1: num 1 1 
# ..$ v2: num 2 2 

由於df$df是數據幀

class(df$df) 
# [1] "data.frame" 

可以使用標準的數據幀的存取...

df$df$v1 
# [1] 1 1 
df$df[1,] 
# v1 v2 
# 1 1 2 

順便提及,RStudio具有顯示這種類型的數據結構的麻煩; view(df)給出了結構的不準確顯示。

最後,你可能關閉創建數據幀列表更好,而不是包含數據幀的數據幀:

df <- data.frame(grp=rep(LETTERS[1:3],each=5),x=rnorm(15),y=rpois(15,5)) 
df.lst <- split(df,df$grp) # creates a list of data frames 
df.lst$A 
# grp   x y 
# 1 A -1.3606420 10 
# 2 A -0.4511408 5 
# 3 A -1.1951950 4 
# 4 A -0.8017765 5 
# 5 A -0.2816298 9 
df.lst$A$x 
# [1] -1.3606420 -0.4511408 -1.1951950 -0.8017765 -0.2816298