R 中的 For 循环用于针对特定列的行创建新的数据帧
For loop in R for creating new data frames with respect to rows of a particular column
你好,我已经创建了一个 forloop 来拆分我的数据相对于某一行:
for(i in 1:(nrow(df)))
{
team_[[i]] <- df %>% filter(team == i)
}
R 不喜欢这个,因为它说找不到 team_。如果我包含这样的列表,代码会 运行
team_ <- list()
for(i in 1:(nrow(df)))
{
team_[[i]] <- df %>% filter(team == i)
}
这行得通...但是,我得到了一个包含数千个空项目的列表,只有少数包含我过滤的数据集。
有没有更简单的方法来创建没有此列表功能的数据集?
谢谢
一个更简单的选项是 base R
中的 split
,这比使用 ==
在循环中进行子集化更快
team_ <- split(df, df$team)
如果我们想对每一行做一些操作,在tidyverse
中,可以用rowwise
来完成
library(dplyr)
df %>%
rowwise %>%
... step of operations ...
或 group_by
df %>%
group_by(team) %>%
...
akrun 建议的方法比循环好得多,但您应该明白为什么这不起作用。请记住 for(i in 1:nrow(df))
会为您提供一个列表项 i = 1、i = 2 等,一直到 i = nrow(df)
,这听起来有几千个。如果您没有 team
为 1 的任何行,您将得到一个空数据框作为第一项,对于未表示的 i
的每个其他值也是如此.
像这样的循环可以工作:
for(i in unique(df$team)) team_[[i]] <- df %>% filter(team == i)
但我会坚持使用 akrun 描述的 non-looping 方法。
你好,我已经创建了一个 forloop 来拆分我的数据相对于某一行:
for(i in 1:(nrow(df)))
{
team_[[i]] <- df %>% filter(team == i)
}
R 不喜欢这个,因为它说找不到 team_。如果我包含这样的列表,代码会 运行
team_ <- list()
for(i in 1:(nrow(df)))
{
team_[[i]] <- df %>% filter(team == i)
}
这行得通...但是,我得到了一个包含数千个空项目的列表,只有少数包含我过滤的数据集。
有没有更简单的方法来创建没有此列表功能的数据集?
谢谢
一个更简单的选项是 base R
中的 split
,这比使用 ==
在循环中进行子集化更快
team_ <- split(df, df$team)
如果我们想对每一行做一些操作,在tidyverse
中,可以用rowwise
library(dplyr)
df %>%
rowwise %>%
... step of operations ...
或 group_by
df %>%
group_by(team) %>%
...
akrun 建议的方法比循环好得多,但您应该明白为什么这不起作用。请记住 for(i in 1:nrow(df))
会为您提供一个列表项 i = 1、i = 2 等,一直到 i = nrow(df)
,这听起来有几千个。如果您没有 team
为 1 的任何行,您将得到一个空数据框作为第一项,对于未表示的 i
的每个其他值也是如此.
像这样的循环可以工作:
for(i in unique(df$team)) team_[[i]] <- df %>% filter(team == i)
但我会坚持使用 akrun 描述的 non-looping 方法。