我正在嘗試在函式中使用資料框的名稱創建一個新列。
這是我的代碼:
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)
結果:
> df1
df_NAME
1 x
2 x
3 x
4 x
5 x
6 x
7 x
8 x
9 x
10 x
預期結果:
> df1
df_NAME
1 df1
2 df1
3 df1
4 df1
5 df1
6 df1
7 df1
8 df1
9 df1
10 df1
uj5u.com熱心網友回復:
一種選擇是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
uj5u.com熱心網友回復:
中base R,使用Map/transform
Map(transform, df_LIST, df_NAME = names(df_LIST))
uj5u.com熱心網友回復:
單線purrr::imap:
library(tidyverse)
df_FUN <- imap(df_LIST, ~ transmute(.x, df_NAME = .y))
> df_FUN$df1
var1 df_NAME
1 1 df1
2 2 df1
3 3 df1
4 4 df1
5 5 df1
6 6 df1
7 7 df1
8 8 df1
9 9 df1
10 10 df1
uj5u.com熱心網友回復:
這里的另一個lapply解決方案。由于您想獲得 的名稱,因此df_LIST您應該使用names而不是deparse(substitute(x)).
此處粘貼前幾行dfs 用于演示。
setNames(
lapply(1:length(df_LIST), function(x)
transmute(df_LIST[[x]], df_NAME = names(df_LIST[x])) %>%
na.omit()),
names(df_LIST)
) %>%
list2env(.GlobalEnv)
df1
df_NAME
1 df1
2 df1
3 df1
df2
df_NAME
1 df2
2 df2
3 df2
df3
df_NAME
1 df3
2 df3
3 df3
uj5u.com熱心網友回復:
cbind使用and 的另一個選項mapply:
df_FUN <- mapply(cbind, df_LIST, "df_NAME"=names(df_LIST), SIMPLIFY=F)
list2env(df_FUN, .GlobalEnv)
輸出
> df_FUN$df1
var1 df_NAME
1 1 df1
2 2 df1
3 3 df1
4 4 df1
5 5 df1
6 6 df1
7 7 df1
8 8 df1
9 9 df1
10 10 df1
uj5u.com熱心網友回復:
transform從我添加的@akrun 的解決方案中復制lapply:
Map(transform,lapply(df_LIST, function(x) {
names(x)[ grep("var", names(x))] <- "df_NAME"
x} ), df_NAME = names(df_LIST))
$df1
df_NAME
1 df1
2 df1
3 df1
4 df1
5 df1
6 df1
7 df1
8 df1
9 df1
10 df1
$df2
df_NAME
1 df2
2 df2
3 df2
4 df2
5 df2
6 df2
7 df2
8 df2
9 df2
10 df2
$df3
df_NAME
1 df3
2 df3
3 df3
4 df3
5 df3
6 df3
7 df3
8 df3
9 df3
10 df3
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/455776.html
上一篇:將一列一分為二:串列中的資料框
下一篇:如何找到兩個資料框之間的共同行?
