所以,我知道我可以使用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”数据帧作为最终结果的正确方法是什么,所有向量都作为列附加?
答案 0 :(得分: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))
答案 1 :(得分: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
这会将包含的向量限制为词干/数字命名模式,以确保您不会对数据帧进行任何意外添加。