R语言将字符值指定为数据集名称

时间:2015-12-10 16:21:47

标签: r vector dataframe

我需要通过同一组代码处理数百个数据帧。为了便于说明,我创建了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。

2 个答案:

答案 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)
}