簡體   English   中英

在R中,如何輕松地將許多向量組合成數據幀?

[英]In R, how to easily combine many vectors into a dataframe?

所以,我知道我可以使用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”數據幀作為最終結果的正確方法,所有向量作為列附加?

您是否正在努力實現以下類似的目標?

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))

如果你的所有單個載體都具有相似的詞干(例如: 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

這會將包含的向量限制為詞干/數字命名模式,以確保您不會對數據幀進行任何意外添加。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM