使用lapply将单个数据帧子集化为R中的数据帧列表

时间:2017-12-27 14:54:09

标签: r dataframe unique subset lapply

大家节日快乐!

对于我以前的编程需求,这个网站特别有用,所以我希望你能在这里帮助我,以及我有点卡住了:)

上下文

目前,我的数据框中充满了名为wc_match_data的足球比赛。这是它的样子:

type_id tourn_id day month year team_A   score_A score_B team_B   win     loss
f       wc_1934  27  5     1934 Germany  5       2       Belgium  Germany Belgium

我无法调整最后一列draw的数据,但如果匹配是平局,则基本上draw列为TRUE,否则,它是FALSE。在抽奖的情况下,胜负列仅由DRAW填充。

type_idfq,具体取决于比赛是世界杯预选赛还是世界杯决赛。 tourn_id指的是比赛所针对的锦标赛,无论是资格赛还是决赛。

我想做什么

我基本上试图为每个世界杯年(1930年,1934年,1950年,1954年等)创建一个新的数据框列表。这些新数据框架中的每一个的第一列应该只是参加世界杯锦标赛的国家(因此每场比赛都会发生变化)。

这就是我正在做的事情

# Create tournament vector (20 total)
wc_years       <- levels(wc_match_data$tourn_id)

# Create empty list
wc_dataframes  <- list()

# Filter
wc_dataframes  <- lapply(wc_years, function(year)
                         data.frame(subset(wc_match_data, tourn_id == year))

这对我不起作用。 创建了一个包含20个元素的列表,但是当我在环境中查看它时,一切都变得无法识别,并且20个数据框中每个元素的tourn_id列都表示它已经存在20级,这显然不是我想要的。它应该只是一个。我很丢失,有人能指出我正确的方向吗?如果能让事情变得更轻松,我很乐意将您的数据发送给您。

最后一个注释

正如你所知道的那样,我甚至不愿意将这些独特的国家纳入lapply功能。我知道这段代码:

unique(c(as.character(unique(wc_match_data$team_A)),
                      as.character(unique(wc_match_data$team_B))))

将返回所有世界杯的唯一国家名单,但我需要这些每个个人世界杯,我无法确定如何做到这一点。

非常感谢您的帮助和节日快乐!我希望这个问题可以在未来帮助人们:)

1 个答案:

答案 0 :(得分:2)

您在寻找split功能吗?基本上你会在你的情况下使用年份作为你的分裂因子。让我举一个使用这个函数的例子:

set.seed(1)
dat=data.frame(matrix(rnorm(10*5),10,5))
split(dat,rep(1:5,each=2))
$`1`
          X1        X2        X3         X4         X5
1 -0.6264538 1.5117812 0.9189774  1.3586796 -0.1645236
2  0.1836433 0.3898432 0.7821363 -0.1027877 -0.2533617

$`2`
          X1         X2          X3          X4        X5
3 -0.8356286 -0.6212406  0.07456498  0.38767161 0.6969634
4  1.5952808 -2.2146999 -1.98935170 -0.05380504 0.5566632

$`3`
          X1          X2          X3         X4         X5
5  0.3295078  1.12493092  0.61982575 -1.3770596 -0.6887557
6 -0.8204684 -0.04493361 -0.05612874 -0.4149946 -0.7074952

$`4`
         X1          X2         X3         X4        X5
7 0.4874291 -0.01619026 -0.1557955 -0.3942900 0.3645820
8 0.7383247  0.94383621 -1.4707524 -0.0593134 0.7685329

$`5`
           X1        X2         X3        X4         X5
9   0.5757814 0.8212212 -0.4781501 1.1000254 -0.1123462
10 -0.3053884 0.5939013  0.4179416 0.7631757  0.8811077