【问题标题】:All brackets are closed - But this loop won't run所有括号都关闭 - 但是这个循环不会运行
【发布时间】:2015-04-18 16:56:06
【问题描述】:

尝试为我的可重现示例组合一个循环。

for (i in c(2006,2008,2010,2012)) {
UniqueID <- 1:10 # <- Not all numeric - Kept as character vector
Name <- LETTERS[seq( from = 1, to = 10 )]
Entity_Type <- factor("This","That")
Data1 <- rnorm(10)     
Data2 <- rnorm(10) 
Data3 <- rnorm(10) 
Data4 <- rnorm(10) 
Year <- i
x[i] <- data.frame(UniqueID, Name, Entity_Type, Data1, Data2, Data3, Data4, Year)
}

现在错误是:

 Error in `[<-.data.frame`(`*tmp*`, i, value = list(UniqueID = 1:10, Name = 1:10,  : 
  new columns would leave holes after existing columns 

我怎样才能格式化它以便它可以在一年中使用该值?

谢谢!

【问题讨论】:

  • 我想你的意思是Year &lt;- i。您应该只使用方括号进行子设置。
  • 谢谢!这修复了该部分,但现在它在创建每个单独的数据框时会弹出一个不同的错误。
  • 什么是x?请确保您的示例是reproducible。如果是列表,您很可能需要x[[i]]&lt;-。另外,这基本上完全改变了你原来的问题,因为这是一个完全不同的问题。您不应进行完全改变问题的编辑。
  • 对不起。 csgillespie 修复了我的第一个非常简单的错误。修复后,下一个可执行部分没有清除。我正在尝试制作 4 个数据框,每个数据框都有不同的年份变量和名称

标签: r loops dataframe


【解决方案1】:

我认为不可能将数据框放入向量中,您必须使用列表。

 x <- list()
 years <- c(2006,2008,2010,2012)

 for (i in 1:length(years)) {
  UniqueID <- 1:10 # <- Not all numeric - Kept as character vector
  Name <- LETTERS[seq( from = 1, to = 10 )]
  Entity_Type <- factor("This","That")
  Data1 <- rnorm(10)     
  Data2 <- rnorm(10) 
  Data3 <- rnorm(10) 
  Data4 <- rnorm(10) 
  Year <- years[i]
  x[[i]] <- data.frame(UniqueID, Name, Entity_Type, Data1, Data2, Data3, Data4, Year)
 }

【讨论】:

  • 这似乎在 x 中创建了一个包含四个数据框的列表。我正在尝试创建四个单独的数据框。但它的外观和表现肯定比我总结的要好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-29
  • 2017-01-05
  • 2022-11-12
  • 1970-01-01
  • 2021-12-26
相关资源
最近更新 更多