创建多个子集数据帧

时间:2018-04-07 22:56:41

标签: r dataframe subset

我是R的新手(以及一般的编程),目前正在尝试弄清楚如何从大文件创建多个数据框子集,而不必使用subset函数来创建每个单独的数据框。这是一个例子。

假设我有一个由数字指​​定的大量足球比赛清单。然后我列出每个游戏中涉及哪些位置(宽接收器,紧密端等),然后列出所得到的码数。

如何为每个游戏(play1,play2等)创建单独的数据框,而无需为每个游戏复制和粘贴单独的subset功能?当有100场比赛/比赛时,它变得相当沉重。这是一个小样本图表:

Play    Play.des    result
1        WR1          -5
1        WR2          -5
1        OL           -5
1        WR3          -5
1        WR4          -5
1        RB           -5
1        QB           -5
2        WR1           7
2        WR2           7
2         OL           7
2        WR3           7
2        RB            7
2        RB            7
2        QB            7
3       WR1           24
3       WR2           24
3        OL           24
3       WR3           24
3       WR4           24
3        RB           24
3        QB           24
4       WR1           -2
4       TE            -2
4       OL            -2
4       TE            -2
4       WR4           -2
4       RB            -2
4       QB            -2

1 个答案:

答案 0 :(得分:0)

一种选择是使用split函数:

dfs <- split(df, unique(df$Play))

dfs$`1`

# Play Play.des result
# 1     1      WR1     -5
# 5     1      WR4     -5
# 9     2      WR2      7
# 13    2       RB      7
# 17    3       OL     24
# 21    3       QB     24
# 25    4       TE     -2

dfs$`2`

# Play Play.des result
# 2     1      WR2     -5
# 6     1       RB     -5
# 10    2       OL      7
# 14    2       QB      7
# 18    3      WR3     24
# 22    4      WR1     -2
# 26    4      WR4     -2

# Similarly 3rd and 4th can be accessed. 

数据:

df <- read.table(text = 
"Play    Play.des    result
1        WR1          -5
1        WR2          -5
1        OL           -5
1        WR3          -5
1        WR4          -5
1        RB           -5
1        QB           -5
2        WR1           7
2        WR2           7
2         OL           7
2        WR3           7
2        RB            7
2        RB            7
2        QB            7
3       WR1           24
3       WR2           24
3        OL           24
3       WR3           24
3       WR4           24
3        RB           24
3        QB           24
4       WR1           -2
4       TE            -2
4       OL            -2
4       TE            -2
4       WR4           -2
4       RB            -2
4       QB            -2",
header = TRUE, stringsAsFactors = FALSE)