如何在R中存储来自多个数据帧的nrow信息

时间:2018-04-06 14:52:42

标签: r loops dataframe

我有36个数据帧,标记为 IALPlms3,IALPsts3,IALPlmns3,IALPstns3IALPlms4,IALPsts4,IALPlmns4,IALPstns4IALPlms5,IALPsts5,IALPlmns5,IALPstns5... IALPlms11,IALPsts11,IALPlmns11,IALPstns11。因此标签中可能有4种不同类型的字符串(即IALPlmsIALPstsIALPlmnsIALPstns),但有9个不同的数字(从3到11) )。

我想将每个数据帧的行数存储在新的数据帧中。 我创建了新的数据框:

tableROWS <- setNames(data.frame(matrix(ncol = 4, nrow = 9)), c("IALPlms","IALPsts","IALPlmns","IALPstns"))
row.names(tableROWS) <- c("table3","table4","table5","table6","table7","table8","table9","table10","table11")

现在我想创建一个循环,这样对于每个数据帧,我存储行数。我试过这个,但它没有用。

for(i in 3:11) {
  for (j in 1:9) {
    tableROWS[j,1] = nrow(IALPlms(i))
    tableROWS[j,2] = nrow(IALPsts(i))
    tableROWS[j,3] = nrow(IALPlmns(i))
    tableROWS[j,4] = nrow(IALPstns(i))   
  }

}

我想获得类似的东西:

        IALPlms IALPsts IALPlmns    IALPstns
table3  #nrow   #nrow   #nrow       #nrow
table4  #nrow   #nrow   #nrow       #nrow
table5  #nrow   #nrow   #nrow       #nrow
table6  #nrow   #nrow   #nrow       #nrow
table7  #nrow   #nrow   #nrow       #nrow
table8  #nrow   #nrow   #nrow       #nrow
table9  #nrow   #nrow   #nrow       #nrow
table10 #nrow   #nrow   #nrow       #nrow
table11 #nrow   #nrow   #nrow       #nrow

我也尝试在循环中使用例如:

    labelA <- paste("IALPlms",(i) )
    labelA <-gsub(" ","",labelA)

然后使用nrow(labelA),但它不会将其识别为现有数据框,它假设它只是一个字符串。

1 个答案:

答案 0 :(得分:0)

在构造变量名称的字符串后,您可以使用get - 函数来获取变量名称为字符串文字的对象。 试试例如:

var1 <- 1:2
var2 <- 5:6

get("var1")  #== var1
#[1] 1 2

var.name <- "var2"
get(var.name)
#[1] 5 6

所以,这样的事情应该有效:

tableROWS <- setNames(data.frame(matrix(ncol = 4, nrow = 9)), c("IALPlms","IALPsts","IALPlmns","IALPstns"))
row.names(tableROWS) <- c("table3","table4","table5","table6","table7","table8","table9","table10","table11")
for(i in 3:11) {
  tableROWS[i-2,1] <- nrow(get(paste0("IALPlms", i)))
  tableROWS[i-2,2] <- nrow(get(paste0("IALPsts", i)))
  tableROWS[i-2,3] <- nrow(get(paste0("IALPlmns", i)))
  tableROWS[i-2,4] <- nrow(get(paste0("IALPstns", i)) )  
}

但是,我不确定上面j - 循环的目的是什么,你只需要遍历表后缀。

写得更紧密,你可以这样做:

for(i in 3:11) {
  for (j in seq_len(ncol(tableROWS))) {
    tableROWS[i-2, 1] <- nrow(get(paste0(names(tableROWS)[j], i)))
  }
}