这不起作用
> 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 :(得分: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