应用嵌套在la中不在R中工作

问题描述 投票:0回答:1

就在今天早些时候,我收到了一个非常有用的答案,我遇到了一个问题,这让我可以进入我的一个项目的下一步。然而,我后来在项目中再次陷入困境,我想知道你们中是否有人可以帮我前进。

Context

目前,我有一个充满足球比赛的数据框列表,名为wc_match_dataframes。以下是其中一个数据框的样子:

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

我无法拟合最后三列drawdrawAdrawB的数据,但基本上draw列是TRUE如果匹配是平局,如果不是,它是FALSE。在平局的情况下,胜负列只是由Draw填补。 drawA列由team_A填充,如果匹配是平局,同样,drawB列由team_B填充。

type_idfq,取决于比赛是世界杯预选赛还是世界杯决赛。 tourn_id指的是比赛的比赛,无论是资格赛还是决赛。

这些数据框总共有39个,20个世界杯比赛中每个都有一个“决赛”数据框,还有19个锦标赛的“资格赛”数据框(第一届世界杯没有资格赛)。

What I Want To Do

我正在尝试使用国家级20个世界杯中的每个世界杯的数据填充不同的数据框wc_dataframes列表,而不是匹配级别。这20个数据框中的每一个都将拥有进入所述锦标赛决赛的国家和他们的数据,如下所示:

  1. 国家
  2. 在排位赛中获胜
  3. 总决赛胜利
  4. 排位赛中的损失
  5. 决赛失利

... 等等。

我已经能够为每个世界杯填充第一个country专栏没有问题,但我正在为其余的专栏遇到问题。

Here is what I'm doing

这是我的代码成功运行的unlooped(仅适用于一个世界杯)版本:

wc_dataframes$wc_1930$fw  <- apply(wc_dataframes$wc_1930, MARGIN = 1, function(country)
                         sum(wc_match_dataframes$`wc_1930 f`$w == country, na.rm = TRUE))

这通过计算胜利次数成功填充了wc_dataframes$wc_1930数据框中的决赛胜利列。

现在,当我尝试在这个世界杯期间尝试并将其置于lapply之下时,就像这样:

lapply(names(wc_dataframes), function(year)
      wc_dataframes$year$fw  <- apply(wc_dataframes$year, MARGIN = 1, function(country)
        sum(wc_match_dataframes$`year f`$w == country, na.rm = TRUE)))

它对我不起作用。我怀疑这个问题与定义year函数并在我的代码的sum部分遇到问题有关。我来自STATA的背景,所以我更习惯于运行for循环而不是。我仍然习惯于R和列表以及所有内容,所以我非常感谢帮助。

谢谢!

非常感谢您的帮助和节日快乐! :)

r dataframe apply lapply
1个回答
3
投票

你需要的是输出你所取代的任何东西:

lapply(names(wc_dataframes), function(year){
  wc_dataframes[[year]]$fw  <- apply(wc_dataframes[[year]], MARGIN = 1, function(country)
    sum(wc_match_dataframes[[paste(year,'f')]]$w == country, na.rm = TRUE));
  wc_dataframes}
  )
© www.soinside.com 2019 - 2024. All rights reserved.