用于创建新的子集化数据帧的功能

时间:2016-04-25 17:10:33

标签: r

如何在R中创建许多新数据帧,这些数据帧是更大数据帧的子集。原始数据框有15列(例如:ao) - 我想要每个子集乘以第三列的值(例如:一个子集只有c =='111_11111',下一个子集只有c =='111_10101' )(列c的值不是连续的)。

到目前为止,我有以下内容:

data <- c([values of column c])
function1.all <- function(x){
  a <- numeric(length(x))
  for(i in seq_along(x)){
    a <- subset(main_data_frame,c==i)
      }
    a
  }

2 个答案:

答案 0 :(得分:0)

如果你没有在c col中使用因子,我会试试这个,你得到一个列表作为输出。我更喜欢用于存储相对大量数据帧的列表,因为您总是可以使列表更大而不是创建新变量。

我将详细介绍代码的每一步:

在标识符列中查找唯一值。在您的情况下使用格式(### _ #####)。

un <- unique(main_data_frame[,"c"])

创建一个列表,将所有数据框存储在其中。该列表的长度等于唯一ID的数量,其也等于唯一数据帧的数量。

many.frames <- vector(mode = "list", length = length(un))

最后,迭代唯一列表,使用子集函数从main_data_frame中提取项目。您基本上将具有唯一ID的所有行拉出到这个新数据框中。

for (i in 1:length(un)) {
  many.frames[[i]] <- subset(main_data_frame, c == un[i])
}

您也可以使用:

many.frames[[i]] <- main_data_frame[,main_data_frame$c==un[i]]

要访问其中任何一个,您可以使用many.frames [[n]],其中n是ID的索引。如果你想通过id,many.frames [[&#34; ### _ #####&#34;]]来拉,只需用引号括起来。

答案 1 :(得分:-1)

假设您的数据框名为df且相关列名为c

values <- unique(df$c)

for (i in 1:length(values)) {
    assign(paste0("df", i), df[df$c == values[i],])
}

这将创建与df $ c中的唯一值一样多的数据帧,每个值都编号为df1,df2等。