admin管理员组文章数量:1410737
I tried to use 'map' to filter a list of dataset. how can I extract the name of dataframe, which is 'YYY' in my code.
library(dplyr)
library(purrr)
df1 <- data.frame(var1=seq(1:10), var2=seq(1:10), ID=1)
df2 <- data.frame(var2=seq(1:10), ID=2)
df3 <- data.frame(var3=seq(1:10), ID=3)
df_lst <- tibble::lst(df1, df2, df3)
codebook= data.frame(var.name = c("var1", "var2", "var3", "ID"),
df.name=c("df1", "df2", "df3", "ALL"))
try <- map(df_lst ~ {
data_sub <- codebook %>% filter(var.name %in% names(.x) & df.name %in% c( YYY, "ALL"))
.x %>% select(data_sub$var.name)
})
I tried to use 'map' to filter a list of dataset. how can I extract the name of dataframe, which is 'YYY' in my code.
library(dplyr)
library(purrr)
df1 <- data.frame(var1=seq(1:10), var2=seq(1:10), ID=1)
df2 <- data.frame(var2=seq(1:10), ID=2)
df3 <- data.frame(var3=seq(1:10), ID=3)
df_lst <- tibble::lst(df1, df2, df3)
codebook= data.frame(var.name = c("var1", "var2", "var3", "ID"),
df.name=c("df1", "df2", "df3", "ALL"))
try <- map(df_lst ~ {
data_sub <- codebook %>% filter(var.name %in% names(.x) & df.name %in% c( YYY, "ALL"))
.x %>% select(data_sub$var.name)
})
Share
Improve this question
edited Mar 23 at 17:53
zephryl
17.7k4 gold badges16 silver badges34 bronze badges
asked Mar 23 at 15:10
StataqStataq
2,3239 silver badges19 bronze badges
2 Answers
Reset to default 1purrr::imap()
will pass the name of each element along with the element itself:
library(purrr)
library(dplyr)
imap(df_lst, \(df, nm) {
data_sub <- codebook %>%
filter(var.name %in% names(df) & df.name %in% c(nm, "ALL"))
df %>% select(data_sub$var.name)
})
Note:
- if you prefer formula-style lambdas (i.e., using
~
instead of\()
), the names will be passed as.y
. - the "manual" approach would be to iterate over
names(df_list)
instead ofdf_list
, then access the dataframe within each iteration usingdf_list[[.x]]
.
Result:
$df1
var1 ID
1 1 1
2 2 1
3 3 1
4 4 1
5 5 1
6 6 1
7 7 1
8 8 1
9 9 1
10 10 1
$df2
var2 ID
1 1 2
2 2 2
3 3 2
4 4 2
5 5 2
6 6 2
7 7 2
8 8 2
9 9 2
10 10 2
$df3
var3 ID
1 1 3
2 2 3
3 3 3
4 4 3
5 5 3
6 6 3
7 7 3
8 8 3
9 9 3
10 10 3
df_lst = mget(ls(pattern='^df\\d{1}$'))
lapply(names(df_lst),
\(d) df_lst[[d]][c(codebook$var.name[d==codebook$df.name], 'ID')])
ALL
seems to be ID
in any case, so it's hard-coded here. This fails if an element of c()
is not in column names of df_lst[[d]]
.
本文标签: rhow to extract dataframe name from a list using mapStack Overflow
版权声明:本文标题:r - how to extract dataframe name from a list using map - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744281518a2598675.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论