我有36个数据帧,标记为
IALPlms3,IALPsts3,IALPlmns3,IALPstns3
,
IALPlms4,IALPsts4,IALPlmns4,IALPstns4
,
IALPlms5,IALPsts5,IALPlmns5,IALPstns5
,
...
IALPlms11,IALPsts11,IALPlmns11,IALPstns11
。因此标签中可能有4种不同类型的字符串(即IALPlms
,IALPsts
,IALPlmns
,IALPstns
),但有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)
,但它不会将其识别为现有数据框,它假设它只是一个字符串。
答案 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)))
}
}