如何在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
}
答案 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等。