我需要通过同一组代码处理数百个数据帧。为了便于说明,我创建了3个数据框:
ds.1 = as.data.frame(matrix(c(1, 0.15, 0.15, 0.15,
0.2, 1, 0.15, 0.15,
0.2, .15, 1, 0.15,
0.2, 0.15, 0.15, 1), nrow=4, ncol=4))
ds.2 = as.data.frame(matrix(c(1, 0.25, 0.25, 0.25,
0.2, 1, 0.25, 0.25,
0.2, .25, 1, 0.25,
0.2, 0.25, 0.25, 1), nrow=4, ncol=4))
ds.3 = as.data.frame(matrix(c(1, 0.50, 0.50, 0.50,
0.2, 1, 0.50, 0.50,
0.2, .50, 1, 0.50,
0.2, 0.50, 0.50, 1), nrow=4, ncol=4))
然后我将数据框名称分配给矢量。
ds.vector <- c("ds.1", "ds.2", "ds.3") #create a vector of data set names
我计算向量中的数据帧数
ds.in.vector <- length(ds.vector) #count the number of elements in vector
我遍历向量,并寻求将数据帧名称分配给名为ds的数据帧。然后我会在ds。
上运行代码for (i in 1:ds.in.vector)
{
ds <- ds.vector[i] #copy each of the data sets into ds
#There would be a bunch of code here. For this example,
# I will just try to print
print(ds)
}
该行: ds&lt; - ds.vector [i] 不会将名称在向量中的数据帧复制到ds中。相反,它将向量的字符串复制到ds。
答案 0 :(得分:3)
这些data.frames属于一个列表。您应该在创建它们时将它们分配到一个。在您的全球环境中拥有数百个data.frames只是疯狂而且实际上并不实用。
library(data.table)
DT <- rbindlist(ds.list, idcol=TRUE)
DT[, print(.SD), by = .id]
当然,如果它们都具有相同的结构,您可以将它们组合成一个数据结构:
function createYearSelect($from) {
// open select
echo "<select class=\"s2 span4\" name=\"desiredCompletion\" placeholder=\"Select a Desired Completion Date\">";
// for each year from the one specified to the one after current
foreach(range($from, date('Y') + 1) as $year) {
// open optgroup for year
echo "<optgroup label=\"$year\">";
// foreach month
foreach (range(1, 12) as $month) {
// timestamp of first day
$time = strtotime("$year-$month-01");
// create option with date() formatting
echo "<option value=\"".date("m/t/Y", $time)."\">".date("F Y", $time)."</option>";
}
// close optgroup for year
echo "</optgroup>";
}
// close select
echo "</select>";
}
答案 1 :(得分:0)
一种方法(尽管效率不高)如下:
ds.cumulated <- get(ds.vector[1])
for (i in 2:ds.in.vector)
{
ds.i <- get(ds.vector[i])
ds.cumulated <- rbind(ds.cumulated, ds.i)
}