我有一個大的資料框串列,如下所示:
> head(lst)
$Set1
ID Value
1 A 1
2 B 1
3 C 1
$Set2
ID Value
1 A 1
2 D 1
3 E 1
$Set3
ID Value
1 B 1
2 C 1
我想將每個資料框中的“值”列的名稱更改為與資料框的名稱相似,以便資料框串列如下所示:
> head(lst)
$Set1
ID Set1
1 A 1
2 B 1
3 C 1
$Set2
ID Set2
1 A 1
2 D 1
3 E 1
$Set3
ID Set3
1 B 1
2 C 1
誰能想到一個函式,它采用串列中每個資料框的名稱并相應地命名列?我的原始串列有超過 400 個資料框,所以我希望以某種方式自動化。對不起,如果這是一個幼稚的問題,但我不知何故被卡住了......
非常感謝!
以下是 dfs 串列的示例:
lst <- list(
data.frame(ID = c("A", "B", "C"), Value = c(1, 1, 1)),
data.frame(ID = c("A", "D", "E"), Value = c(1, 1, 1)),
data.frame(ID = c("B", "C"), Value = c(1, 1)),
data.frame(ID = c("B", "C"), Value = c(1, 1)),
data.frame(ID = c("B", "C"), Value = c(1, 1)),
data.frame(ID = c("B", "C"), Value = c(1, 1)))
lst_names <- c("Set1", "Set2", "Set3", "Set4", "Set5","Set6")
names(lst) <- lst_names
uj5u.com熱心網友回復:
在 tidyverse 中,我們可以使用purrr::imapand dplyr::rename:
library(purrr)
library(dplyr)
lst %>%
imap(~ rename(.x, "{.y}" := Value))
#> $Set1
#> ID Set1
#> 1 A 1
#> 2 B 1
#> 3 C 1
#>
#> $Set2
#> ID Set2
#> 1 A 1
#> 2 D 1
#> 3 E 1
#>
#> $Set3
#> ID Set3
#> 1 B 1
#> 2 C 1
#>
#> $Set4
#> ID Set4
#> 1 B 1
#> 2 C 1
#>
#> $Set5
#> ID Set5
#> 1 B 1
#> 2 C 1
#>
#> $Set6
#> ID Set6
#> 1 B 1
#> 2 C 1
由reprex 包創建于 2022-03-28 (v2.0.1)
uj5u.com熱心網友回復:
我們可以做的,
lapply(
names(lst),
function(x) setNames(lst[[x]], c(names(lst[[x]])[2], x))
)
[[1]]
Value Set1
1 A 1
2 B 1
3 C 1
[[2]]
Value Set2
1 A 1
2 D 1
3 E 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/450966.html
