首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在For循环内的R中创建子集数据帧

在For循环内的R中创建子集数据帧
EN

Stack Overflow用户
提问于 2018-07-25 22:47:22
回答 6查看 99关注 0票数 0

我尝试做的是根据较大数据帧中第一列的值将较大的数据帧过滤成78个唯一的数据帧。我能想到的唯一正确的方法是在for()循环中应用filter()函数:

代码语言:javascript
复制
 for (i in 1:nrow(plantline)) 
            {x1 = filter(rawdta.df, Plant_Line == plantline$Plant_Line[i])}

问题是我不知道如何创建一个新的数据框,比如x2、x3、x4……每次循环运行的时候。

有没有人能告诉我这是否可能,或者我是否应该尝试用其他方式来做这件事?

EN

回答 6

Stack Overflow用户

发布于 2018-07-25 22:57:48

这个问题肯定有很多重复的地方

代码语言:javascript
复制
split(plantline, plantline$Plant_Line)

将创建一个data.frames列表。

但是,根据您的用例,可能没有必要将大型data.frame拆分为多个部分,因为可以使用分组。

票数 2
EN

Stack Overflow用户

发布于 2018-07-25 23:01:33

你可以使用split -

代码语言:javascript
复制
# 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
EN

Stack Overflow用户

发布于 2018-07-25 22:53:47

如果我们能看到数据帧,那就更容易了……

尽管如此,我还是提出了一些建议。您可以创建数据帧列表:

代码语言:javascript
复制
dataframes <- vector("list", nrow(plantline))
for (i in 1:nrow(plantline)){ 
     dataframes[[i]] = filter(rawdta.df, Plant_Line == plantline$Plant_Line[i])
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51521812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档