提取函数内的数据框名称以创建新列

btt*_*mio 6 r list dataframe dplyr

我正在尝试在函数内使用数据框的名称创建一个新列。

这是我的代码:

df1 <- data.frame(var1 = seq(1:10))
df2 <- data.frame(var2 = seq(1:10))
df3 <- data.frame(var3 = seq(1:10))

df_LIST <- tibble::lst(df1, df2, df3)
df_FUN <- lapply(
  df_LIST, 
  function(x)
  {
    mutate(x, 
           df_NAME = deparse(substitute(x))
    ) %>%
      select("df_NAME") %>%
      na.omit()
  }  
)

list2env(df_FUN, .GlobalEnv)
Run Code Online (Sandbox Code Playgroud)

结果:

> df1
   df_NAME
1        x
2        x
3        x
4        x
5        x
6        x
7        x
8        x
9        x
10       x
Run Code Online (Sandbox Code Playgroud)

预期结果:

> df1
   df_NAME
1      df1
2      df1
3      df1
4      df1
5      df1
6      df1
7      df1
8      df1
9      df1
10     df1
Run Code Online (Sandbox Code Playgroud)

ste*_*fan 7

一种选择是purrr::imap

library(dplyr)

df_LIST <- tibble::lst(df1, df2, df3)
df_FUN <- purrr::imap(
  df_LIST,
  function(x, y) {
    mutate(x,
      df_NAME = y
    ) %>%
      select("df_NAME") %>%
      na.omit()
  }
)

df_FUN$df1
#>    df_NAME
#> 1      df1
#> 2      df1
#> 3      df1
#> 4      df1
#> 5      df1
#> 6      df1
#> 7      df1
#> 8      df1
#> 9      df1
#> 10     df1
Run Code Online (Sandbox Code Playgroud)