如何按照模式向列表的每个数据框添加相同的列
Posted
技术标签:
【中文标题】如何按照模式向列表的每个数据框添加相同的列【英文标题】:How to add the same column to each dataframe of my list followin a pattern 【发布时间】:2022-01-15 05:07:33 【问题描述】:这是我的数据集列表的表示。
每个数据集有两列:Year
和 Age
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
【讨论】:
以上是关于如何按照模式向列表的每个数据框添加相同的列的主要内容,如果未能解决你的问题,请参考以下文章