【问题标题】:Using lapply to subset a single data frame into a list of data frames in R使用 lapply 将单个数据帧子集到 R 中的数据帧列表中
【发布时间】:2018-06-08 05:15:55
【问题描述】:

祝大家节日快乐!

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

上下文

目前,我有一个名为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))))

将返回所有世界杯的唯一国家/地区列表,但我需要这些用于每个个人世界杯,我真的不知道该怎么做。

非常感谢您的帮助,祝您节日快乐!我希望这个问题可以帮助将来的人:)

【问题讨论】:

    标签: r dataframe unique subset lapply


    【解决方案1】:

    您在寻找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
    

    【讨论】:

    • 是的,这就是我想要的。我不确定我是如何错过split 功能的,但我真的很感谢您的帮助。谢谢。
    • 很高兴。 :)。节日快乐
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 2020-05-21
    • 1970-01-01
    • 2020-09-11
    • 2020-04-04
    • 1970-01-01
    • 2013-10-15
    相关资源
    最近更新 更多