您好,我創建了一個 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)
}
這行得通……但是,我得到了一個包含數千個空專案的串列,其中只有幾個包含我的過濾資料集。
有沒有更簡單的方法來創建沒有這個串列函式的資料集?
謝謝
uj5u.com熱心網友回復:
一個更簡單的選項是splitfrom base Rwhich 比==在回圈中使用 to subset更快
team_ <- split(df, df$team)
如果我們想對每一行做一些操作, in tidyverse,可以用rowwise
library(dplyr)
df %>%
rowwise %>%
... step of operations ...
或與group_by
df %>%
group_by(team) %>%
...
uj5u.com熱心網友回復:
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 描述的非回圈方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/443149.html
