我要做的是根据较大数据帧中第一列的值将较大的数据帧过滤为78个唯一数据帧。我认为正确执行此操作的唯一方法是在filter()
循环内应用for()
函数:
for (i in 1:nrow(plantline))
{x1 = filter(rawdta.df, Plant_Line == plantline$Plant_Line[i])}
问题是我不知道如何在每次循环运行时创建一个新的数据帧,例如x2,x3,x4...。
有人可以告诉我这是否可行,或者我是否应该尝试其他方式?
答案 0 :(得分:2)
这个问题必须有很多重复
split(plantline, plantline$Plant_Line)
将创建一个data.frames列表。
但是,根据使用情况,可能不需要将大的data.frame分成几部分,因为可以使用分组。
答案 1 :(得分:2)
您可以使用split
-
# creates a list of dataframes into 78 unique data frames based on
# the value of the first column in the larger data frame
lst = split(large_data_frame, large_data_frame$first_column)
# takes the dataframes out of the list into the global environment
# although it is not suggested since it is difficult to work with 78
# dataframes
list2env(lst, envir = .GlobalEnv)
数据框的名称将与第一列中变量的值相同。
答案 2 :(得分:0)
如果我们可以看到数据框,那会更容易。...
尽管如此,我还是提出了一些建议。您可以创建数据框列表:
dataframes <- vector("list", nrow(plantline))
for (i in 1:nrow(plantline)){
dataframes[[i]] = filter(rawdta.df, Plant_Line == plantline$Plant_Line[i])
}
答案 3 :(得分:0)
您可以使用assign
:
for (i in 1:nrow(plantline))
{assign(paste0(x,i), filter(rawdta.df, Plant_Line == plantline$Plant_Line[i]))}
或者,您也可以将结果保存在list
中:
X <- list()
for (i in 1:nrow(plantline))
{X[[i]] = filter(rawdta.df, Plant_Line == plantline$Plant_Line[i])}
答案 4 :(得分:0)
使用示例数据会更容易。是我的最爱。
target
答案 5 :(得分:0)
使用plyr
的解决方案:
ma <- cbind(x = 1:10, y = (-4:5)^2, z = 1:2)
ma <- as.data.frame(ma)
library(plyr)
dlply(ma, "z") # you split ma by the column named z