【问题标题】:Function to create a new dataframe from data subsets从数据子集创建新数据框的函数
【发布时间】:2018-04-12 01:18:42
【问题描述】:

我有一个大型数据框 data,其中包含许多车辆及其地理空间位置。我能够使用以下代码运行一个循环来对每个车辆 ID 的数据进行子集化。

uniq <- unique(unlist(data$vehicleid))
for (i in 1:length(uniq)){
    data_1 <- subset(data, vehicleid == uniq[i])
    #your desired function
}

我需要编写一个函数,以便我可以提取每个子集的第一行并将所有提取的行放在一个新的单独数据框中。我该怎么做?

【问题讨论】:

    标签: r for-loop dataframe subset


    【解决方案1】:

    这是提取第一行 4 个 id 的示例

    example <- expand.grid(id=letters[1:4], value=5:10)
    ids <- unique(example$id)
    plyr::ldply(ids, function(x) example[example$id==x,][1,])
    
    #   id value
    # 1  a     5
    # 2  b     5
    # 3  c     5
    # 4  d     5
    

    替代方案:

    example_list <- split(example, example$id)
    do.call(rbind, lapply(example_list, '[', 1,))
    

    【讨论】:

    【解决方案2】:

    考虑经常被忽视的by,它可以按一个或多个因素对数据帧进行子集化,并通过函数运行子集数据帧:

    # LIST OF FIRST ROW DATA FRAMES FOR EACH VECHICLE ID
    dfs <- by(data, data$vehicleid, FUN=function(d), d[1,])
    
    # ROW BIND ALL DF ELEMENTS
    finaldf <- do.call(rbind, dfs) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-21
      • 1970-01-01
      • 1970-01-01
      • 2020-02-26
      • 1970-01-01
      • 2017-01-14
      • 1970-01-01
      • 2022-07-31
      相关资源
      最近更新 更多