使用循环将数据帧的变量名称读取到另一个数据帧中

时间:2014-09-09 14:24:55

标签: r loops dataframe

因此,使用for循环,我能够将r中的110万行数据集分成110个表,每个表大约10,000行,希望能够更好地处理数据。我现在想要运行另一个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函数似乎不是正确的。有什么想法吗?

3 个答案:

答案 0 :(得分:0)

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

nrow代替nrows

答案 1 :(得分:0)

这是使用示例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"  

答案 2 :(得分:0)

我愿意打赌你的表调用的问题是你没有指定文件扩展名(假设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}
}

当然,这假设了一些关于如何设置问题中的所有内容的事情,但这是我根据您的描述和代码进行的最佳猜测