如何按照模式向列表的每个数据框添加相同的列

Posted

技术标签:

【中文标题】如何按照模式向列表的每个数据框添加相同的列【英文标题】:How to add the same column to each dataframe of my list followin a pattern 【发布时间】:2022-01-15 05:07:33 【问题描述】:

这是我的数据集列表的表示。 每个数据集有两列:YearAge

list(
  
  data.frame(
    year=c(2010,2010,2011),
    Age=c(23,24,25)
  ),
  data.frame(
    year=c(2010,2010,2011),
    Age=c(23,24,25)
  ),
  data.frame(
    year=c(2010,2010,2011),
    Age=c(23,24,25)
  )
)

我想为每个数据集添加一列=Center

中心号必须是数据集在列表中的索引:

这是预期列表的下方

[[1]]
  year Age   Center
1 2010  23 Center 1
2 2010  24 Center 1
3 2011  25 Center 1

[[2]]
  year Age   Center
1 2010  23 Center 2
2 2010  24 Center 2
3 2011  25 Center 2

[[3]]
  year Age   Center
1 2010  23 Center 3
2 2010  24 Center 3
3 2011  25 Center 3

我不知道如何通过列表自动执行此操作。

【问题讨论】:

【参考方案1】:

您要查找的函数是lapply。您将您的列表和一个函数传递给它,它会将您的函数应用于列表的每个元素。

如果你的名单叫l

l <- lapply(seq_along(l), function(id)
  df <- l[[id]]
  df$Center = id
  return(df)
)

【讨论】:

这会将“center 1”添加到所有 dfs,这不是 TO 想要的。 我已经相应地编辑了我的答案【参考方案2】:

您可以尝试lapply 循环浏览列表

lapply( seq_along(lis), function(x) cbind( lis[[x]], Center=paste("Center",x)) )
[[1]]
  year Age   Center
1 2010  23 Center 1
2 2010  24 Center 1
3 2011  25 Center 1

[[2]]
  year Age   Center
1 2010  23 Center 2
2 2010  24 Center 2
3 2011  25 Center 2

[[3]]
  year Age   Center
1 2010  23 Center 3
2 2010  24 Center 3
3 2011  25 Center 3

【讨论】:

【参考方案3】:

另一种解决方案,基于purrr::imap

library(tidyverse) 

mylist <- list(
  data.frame(
    year=c(2010,2010,2011),
    Age=c(23,24,25)
  ),
  data.frame(
    year=c(2010,2010,2011),
    Age=c(23,24,25)
  ),
  data.frame(
    year=c(2010,2010,2011),
    Age=c(23,24,25)
  )
)

imap(mylist, ~ bind_cols(.x, Center = str_c("Center ",.y)))

#> [[1]]
#>   year Age   Center
#> 1 2010  23 Center 1
#> 2 2010  24 Center 1
#> 3 2011  25 Center 1
#> 
#> [[2]]
#>   year Age   Center
#> 1 2010  23 Center 2
#> 2 2010  24 Center 2
#> 3 2011  25 Center 2
#> 
#> [[3]]
#>   year Age   Center
#> 1 2010  23 Center 3
#> 2 2010  24 Center 3
#> 3 2011  25 Center 3

【讨论】:

以上是关于如何按照模式向列表的每个数据框添加相同的列的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 for 循环将列值添加到数据框字典中,以便每个数据框都有一个唯一的列?

向熊猫数据框箱线图添加标签?

如何根据作为值列表的列值扩展熊猫数据框[重复]

如何隐藏组合框下拉列表中的列?

如何使用嵌套字典列表展平熊猫数据框中的列

按 R 中的列值过滤列表中的每个数据框