编写一个 for 循环,通过连接每次迭代来附加一列 - r

问题描述 投票:0回答:1

我需要迭代地将数据连接到 tibble(或数据帧),以便每次执行循环时 tibble 都会增长一列。

令 bin_list 为执行连接的标识符:

bin_list<-c(6,7,8,9,10,11,12,13)

并将以下三个小标题一次连接起来:

hour_1<-(tibble(bin_list=c(3,4,5,6,7,8,9,10,11,12,13), rain=c(0,0,.25,0,0,.25,0,0,0,0,.25)))
hour_2<-(tibble(bin_list=c(3,4,5,6,7,8,9,10,11,12,13), rain=c(0,0,.25,0,0,0,0,0,.25,0,.25)))
hour_3<-(tibble(bin_list=c(3,4,5,6,7,8,9,10,11,12,13), rain=c(0,0,.25,0,0,.25,0,0,.5,0,.25)))

最终,我正在尝试制作:

final<- tibble(bin_list=c(6,7,8,9,10,11,12,13), hour_1=c(0,0,.25,0,0,0,0,.25), hour_2=c(0,0,0,0,0,.25,0,.25), hour_3=c(0,0,.25,0,0,.5,0,.25))

一直在摆弄“for”、“left_join”和“assign”,但无法破解它。我知道有一种更有效的方法来连接这些时间(可能是嵌套左连接),但我正在处理中等大小的数据。

bin_list 约为 75,000 行,每个 hour_i 存储为 .txt 文件约 150 万行。我想要完成的是调用hour_1,left_join到bin_list,在env中分配它,调用hour 2,left_join到已经加入bin_list的hour_1,在env中分配它,调用hour 3....

对于 左连接 分配

r for-loop dplyr left-join assign
1个回答
0
投票

关于:

library(purrr)
library(dplyr)

tibble_names <- paste0('hour_', 1:3)
main_bin_list <- 6:13

cbind(main_bin_list,
      tibble_names |>
      map(~ get(.x) |>
            filter(bin_list %in% main_bin_list) |>
            select(rain)       
          ) |>
      reduce(cbind) |>
      setNames(nm = tibble_names)
      )

输出:

  main_bin_list hour_1 hour_2 hour_3
1             6   0.00   0.00   0.00
2             7   0.00   0.00   0.00
3             8   0.25   0.00   0.25
## ...
© www.soinside.com 2019 - 2024. All rights reserved.