微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从现有数据框列表创建新的数据框列表

如何解决从现有数据框列表创建新的数据框列表

d1 <- data.frame(id = c("a","b","c"),val = c(111,444,777),month = c( "jan","Jan","jan" ))
d2 <- data.frame(id = c("a",val = c(222,555,888),month = c( "feb","feb","feb" ))
d3 <- data.frame(id = c("a",val = c(333,666,999),month = c( "mar","mar","mar" ))

old.list <- list(d1,d2,d3)


s1 <- data.frame(id = c("a","a","a"),222,333),"mar" ))
s2 <- data.frame(id = c("b","b"),val = c(444,666),month = c( "Jan","mar" ))
s3 <- data.frame(id = c("c","c",val = c(777,888,"mar" ))

new.list <- list(s1,s2,s3)

'old.list' 中的所有数据框大小相同,具有相同的唯一 ID。我正在尝试将“old.list”转换为每个唯一 id 的时间序列,其中“month”是时间戳,即“new.list”,而不使用 for 循环。

补充说明,'old.list'中每个数据框的第n行被组合起来为'new.list'创建新的数据框,提前致谢。

解决方法

在基础 R 中,您可以 rbind 您的列表元素和 split id:

new.list <- do.call(rbind,old.list)
new.list <- split(new.list,new.list$id)
,

假设您的所有系列都在 1 月开始,这应该可行:

(如果不查看 ts 的 start 参数)

d1 <- data.frame(id = c("a","b","c"),val = c(111,444,777),month = c( "jan","Jan","jan" ))
d2 <- data.frame(id = c("a",val = c(222,555,888),month = c( "feb","feb","feb" ))
d3 <- data.frame(id = c("a",val = c(333,666,999),month = c( "mar","mar","mar" ))

old.list <- list(d1,d2,d3)

d <- Reduce(rbind,old.list)
d <- split(d$val,d$id)

lapply(d,ts,frequency = 12)
#> $a
#>   Jan Feb Mar
#> 1 111 222 333
#> 
#> $b
#>   Jan Feb Mar
#> 1 444 555 666
#> 
#> $c
#>   Jan Feb Mar
#> 1 777 888 999

reprex package (v0.3.0) 于 2021 年 3 月 12 日创建

,

这是一个 tidyverse 方法:

d1 <- data.frame(id = c("a",d3)

library(dplyr)
library(purrr)

old.list %>% 
  reduce(rbind,by = 'id') %>% 
  filter(id != 'id') %>% 
  group_split(id)


#> [[1]]
#> # A tibble: 3 x 3
#>   id    val   month
#>   <chr> <chr> <chr>
#> 1 a     111   jan  
#> 2 a     222   feb  
#> 3 a     333   mar  
#> 
#> [[2]]
#> # A tibble: 3 x 3
#>   id    val   month
#>   <chr> <chr> <chr>
#> 1 b     444   Jan  
#> 2 b     555   feb  
#> 3 b     666   mar  
#> 
#> [[3]]
#> # A tibble: 3 x 3
#>   id    val   month
#>   <chr> <chr> <chr>
#> 1 c     777   jan  
#> 2 c     888   feb  
#> 3 c     999   mar

reprex package (v0.3.0) 于 2021 年 3 月 12 日创建

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。