【问题标题】:Using lapply in R to loop through a list of data.frames in R在 R 中使用 lapply 循环遍历 R 中的 data.frames 列表
【发布时间】:2020-10-16 09:05:31
【问题描述】:

由于尺寸限制,我有一个如下所示的数据框:

所以我的目标是采用bottleneck_list,这是一个数据帧列表,并使用 lapply,对所有数据帧运行相同的分析。它们是自定义的,但我正在努力让它通过每个 df。

testbottleneck_list[[1]]

这里是函数示例

  test2 <- test %>% 
  mutate(early_startTime = startTime - 300) %>% 
  mutate(id = rownames(test))

loop <- lapply(1:nrow(test), function(x) {
  neck_row <- test[x,]
  
  test_list <- test[which(test$startTime == bottleneck_row$endTime),]
})
match <- do.call(rbind,loop)

events * match

所以基本上每个数据帧都必须对其进行若干操作。

这是我尝试过的:

list_alt <- lapply(bottleneck_list, sapply, function(x) {

  test <- bottleneck_list[[x]]
  
  test2 <- test %>% 
  mutate(early_startTime = startTime - 300) %>% 
  mutate(id = rownames(test))


loop <- lapply(1:nrow(test), function(x) {
  neck_row <- test[x,]
  
  test_list <- test[which(test$startTime == bottleneck_row$endTime),]
})
match <- do.call(rbind,loop)

match
})

但不起作用。最终结果应该是我在这个列表中的所有数据框是一个包含另外两个变量的数据框列表。

编辑: 我需要参考bottleneck_list[[1]] 才能使其正常工作。

【问题讨论】:

    标签: r list dplyr apply lapply


    【解决方案1】:

    如果它是一个 list 的 data.frames,循环使用 mapmutatelistmutate 在每个 data.frames 中创建新列

    library(purrr)
    library(dplyr)
    bottleneck_list2 <- map(bottleneck_list, ~ .x %>%
              mutate(early_startTime = startTime - 300, id = row_number()))
    

    或者使用来自base Rlapply

    bottleneck_list2 <- lapply(bottleneck_list, function(test)
           transform(test, early_startTime = startTime - 300, id = row.names(test)))
    

    如果我们想做一些转换

     lapply(bottleneck_list, function(test){
            row.names(test) <- NULL
            test$somecol <- test$col1 + 24
            test
             })    
    

    【讨论】:

    • 这是一个数据框列表,但我认为这不会起作用,因为会发生几个操作,现在更新代码
    • @JohnThomas 您的单个data.frame 代码显示为test %&gt;% mutate(early_startTime = startTime - 300) %&gt;% mutate(id = rownames(test))
    • 已更新以更好地封装问题。基本上,如果我必须对每个数据帧进行大量操作,但方式相同。
    • @JohnThomas events &lt;- do.call(rbind,test2)list 的 data.frames 上完成。在更新的代码中,不清楚
    • 实际操作是为了重现性(或缺乏重现性),但我要问的是,我能否获取一个 data.frames 列表并对它们执行任意数量的相同操作。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 2019-10-22
    • 2018-10-01
    相关资源
    最近更新 更多