R中“for”循环的不同长度的向量:在数据帧中合并

时间:2013-08-20 12:40:15

标签: r for-loop dataframe

我在R中有以下基本问题。

我有一个for (k in 1:x){...}周期,它产生长度取决于k的数字向量。 对于k的每个值,我生成一个数字向量。

如果可能的话,我想将它们收集为R中的数据帧行。换句话说,我想介绍一个数据框data s.t.

    for (k in 1:x) {
            data[k,] <- ...      
                     }

其中点表示生成长度取决于k的向量的命令。

不幸的是,据我所知,R中数据帧行的长度是常量,因为它是一个相等长度的向量列表。我已经尝试用适当数量的零来完成每一行以达到恒定长度(在这种情况下等于x)。我想“动态地”工作。

我不认为这个问题等同于数据帧中不同长度的合并向量;由于if周期,每步只知道一个向量。

修改

我的意思的一个非常简单的例子。对于每个k,我想编写其组件为1,2,...,k的向量,并将其存储为数据帧k的第data行。在上面的设置中,我会写

 for (k in 1:x) {
                data[k,] <- seq(1,k,1)     
                         }

由于seq(1,k,1)的长度取决于k,因此代码无效。

1 个答案:

答案 0 :(得分:3)

您可以考虑在ldply使用plyr

set.seed(123)
#k is the length of each result
k <- sample( 5 , 3 , repl = TRUE )
#[1] 2 4 3


# Make a list of vectors, each a sequence from 1:k
ll <- lapply( k , function(x) seq_len(x) )
#[[1]]
#[1] 1 2

#[[2]]
#[1] 1 2 3 4

#[[3]]
#[1] 1 2 3

# take our list and rbind it into a data.frame, filling in missing values with NA
ldply( ll , rbind)
#  1 2  3  4
#1 1 2 NA NA
#2 1 2  3  4
#3 1 2  3 NA