将data.frame指定为R中data.frame中的一个组件

时间:2014-11-09 00:24:24

标签: 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)有同样的错误。请帮忙。

谢谢。

2 个答案:

答案 0 :(得分:0)

出于格式原因,将其从评论中移出:

你到底想要达到什么目的?如果你想将dfi的内容传递给df,你可以使用这段代码:

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

df=dfi

答案 1 :(得分: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