应用嵌套在Rpp

时间:2017-12-27 20:38:39

标签: r dataframe apply lapply

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

上下文

目前,我有一个数据框列表,其中包含名为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列为{{1}如果匹配是抽奖,如果不是,则为TRUE。在抽奖的情况下,胜负列仅由FALSE填充。如果匹配是抽奖,则Draw列由drawA填充,同样,team_A列由drawB填充。

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

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

我想做什么

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

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

    我已经能够为每个世界杯填充第一个wc_dataframes列没有问题,但是我遇到了其余列的问题。

    这是我正在做的事情

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

    country

    通过计算胜利次数,成功填充了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)) 数据框中的决赛胜利列。

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

    wc_dataframes$wc_1930

    它对我不起作用。我怀疑这个问题与定义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部分遇到问题有关。我来自STATA的背景,所以我更习惯于运行sum循环,什么不是。我仍然习惯于R和列表以及所有内容,所以我非常感谢你的帮助。

    谢谢!

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

1 个答案:

答案 0 :(得分: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}
  )