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 方法。