就在今天早些时候,我收到了一个非常有用的答案,我遇到了一个问题,这让我可以进入我的一个项目的下一步。但是,我在项目后期再次陷入困境,我想知道你们中是否有人可以帮助我继续前进。
目前,我有一个数据框列表,其中包含名为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
我无法拟合最后三列draw
,drawA
和drawB
的数据,但基本上draw
列为{{1}如果匹配是抽奖,如果不是,则为TRUE
。在抽奖的情况下,胜负列仅由FALSE
填充。如果匹配是抽奖,则Draw
列由drawA
填充,同样,team_A
列由drawB
填充。
team_B
是type_id
或f
,具体取决于比赛是世界杯预选赛还是世界杯决赛。 q
指的是比赛所针对的锦标赛,无论是资格赛还是决赛。
这些数据框总共有39个,20个世界杯比赛中每个都有一个“决赛”数据框,还有19个锦标赛的“资格赛”数据框(第一届世界杯没有资格赛)
我正在尝试使用国家级20个世界杯中每个世界杯的数据填充不同的数据框列表tourn_id
,而不是匹配级别。这20个数据框中的每一个都将有进入所述锦标赛决赛的国家和他们的数据如下:
......等等。
我已经能够为每个世界杯填充第一个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和列表以及所有内容,所以我非常感谢你的帮助。
非常感谢您的帮助和节日快乐! :)
答案 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}
)