1

所以,我知道我可以使用 data.frame 命令将多个向量组合成一个数据帧,如下所示:

my.data <- data.frame(name1, age1, name20, age20, name38, age38)

(我知道,变量名没有多大意义,为什么我要在三个不同的列中使用 name1、name20 和 name38?请忽略:我的实际变量名不同——这仅用于说明目的)。

问题是,我有大约 40 个这样的向量,而且我还必须在代码的其他部分中组合许多向量。所以我不每次都复制粘贴一大块代码会很方便。所以我想围绕这个写一个for循环:

for (i in c("name", "age", "hgt"))
{
    for (k in c(1,20,38))
    {
    my.data$i,as.character(k) <- data.frame(get(paste(i,as.character(k),sep="")))
    }
}

但这不起作用。这是因为我应该在其中一些代码周围写“paste()”,还是这只是解决这个问题的不好方法?遍历 i 和 k 并获得“newdata”数据帧作为最终结果的正确方法是什么,所有向量都作为附加的列?

4

2 回答 2

2

您是否正在尝试实现以下目标?

name1 <- letters[1:10]
age1 <- 1:10
name20 <- letters[11:20]
age20 <- 11:20
name38 <- LETTERS[1:10]
age38 <- 21:30

paste.pattern <- paste(rep(c("name", "age"), times = 3), 
                       rep(c(1, 20, 38), each = 2), sep = "")

newdata <- data.frame(sapply(paste.pattern, get))
于 2012-10-28T02:47:06.630 回答
1

如果您所有的单个向量都具有相似的词干(例如:)hgt和数字(例如1)排列,那么您可以执行以下操作:

# test data
name1 <- letters[1:10]
age1 <- 1:10
name20 <- letters[11:20]
age20 <- 11:20
name38 <- LETTERS[1:10]
age38 <- 21:30

# group them up in a dataframe looking for "age" OR (|) "name" as the stem
data.frame(sapply(ls(pattern="^age[0-9]+$|^name[0-9]+$"),get))

# result:
   age1 age20 age38 name1 name20 name38
1     1    11    21     a      k      A
2     2    12    22     b      l      B
3     3    13    23     c      m      C
4     4    14    24     d      n      D
5     5    15    25     e      o      E
6     6    16    26     f      p      F
7     7    17    27     g      q      G
8     8    18    28     h      r      H
9     9    19    29     i      s      I
10   10    20    30     j      t      J

这会将包含的向量限制为词干/数字命名模式,以确保您不会对数据框进行任何意外添加。

于 2012-10-28T02:56:13.993 回答