【问题标题】:Reading variable name of dataframe into another dataframe using loops使用循环将数据帧的变量名称读入另一个数据帧
【发布时间】:2014-09-09 14:24:54
【问题描述】:

因此,使用 for 循环,我能够将 r 中的 110 万行数据集分解为 110 个表,每个表大约 10,000 行,希望让 r 更好地处理数据。我现在想运行另一个 for 循环,将每个表中的值分配给不同的数据框名称。

我的表名是:

Pom_1
Pom_2
Pom_3
...

Pom_110

我想要做的是创建一个如下的 for 循环:

for (i in 1:110)
{
  Pom <- read.table(paste("Pom",i,sep = "_"))
  for (j in 1:nrows(Pom))
  {do something}
}

所以我想遍历数组并将每个 Pom 表的值分配给“Pom”,这样我就可以在 Pom 的每个小节上运行一个 for 循环。这个问题是 read.table 函数似乎不是正确的。有什么想法吗?

【问题讨论】:

  • 很抱歉,但您的方法看起来与您应该做的“让 r 更好地处理数据”相反。
  • 我和罗兰在一起,但这是你的问题,到底是什么问题?有什么错误吗?这些表名是您工作目录中的实际文件还是您环境中的变量?如果它们是文件,则需要将文件类型添加到末尾,例如 csv 文件,它将是 read.csv("Pom_1.csv") 而不是 read.csv("Pom_1")

标签: r loops dataframe


【解决方案1】:

您能否举一个更具体的示例来说明您想对每个数据帧做什么?你应该尽可能避免使用内部循环,如果你真的需要看看?apply

nrow 而不是nrows

【讨论】:

    【解决方案2】:

    这是使用示例data.frame 的通用解决方案。你要找的函数是assign,查看它的帮助页面:

    Pom = data.frame(x = rnorm(30)) #original data.frame
    
    n.tables = 3  # number of new data.frames you want to creat
    
    Pom.names = paste("Pom",1:3,sep="") # name of all new data.frames
    
    breaks = nrow(Pom)/n.tables * 0:n.tables  # breaks of the original data.frame
    
    for (i in 1:n.tables) {
        rows = (breaks[i]+1):breaks[i+1]  # which rows from Pom are going to be assign to the new data.frame?
        assign(Pom.names[i],Pom[rows,]) # create new data.frame
    }
    
    ls()
    
    [1] "breaks"    "i"         "n.tables"  "Pom"       "Pom.names" "Pom1"     
    [7] "Pom2"      "Pom3"      "rows"  
    

    【讨论】:

    • 我真的非常建议不要这样做。
    • 我也没有,但@Forrest38 没有给我们足够的信息来提供更好的答案。它完成了工作,但如果是我的代码,我不会那样做
    【解决方案3】:

    我愿意打赌您的表格调用的问题在于您没有指定文件扩展名(假设 Pom_1 - Pom_110 是您工作目录中的文件,我认为它们是因为您使用的是 read.table )。

    您可以通过以下方式修复它

    fileExtension<-".xls"   #specify your extension, I assume xls
    for (i in 1:110)
    {
      tablename<-paste("Pom",i,sep = "_")
      Pom <- read.table(paste(tablename, fileExtension, sep=""))
      for (j in 1:nrows(Pom))
      {do something}
    }
    

    当然,这是假设您的问题中的所有内容是如何设置的,但这是我根据您的描述和代码的最佳猜测

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-20
      • 2016-10-05
      • 2021-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多