gpt4 book ai didi

重命名列表中 Data.frame 的列

转载 作者:行者123 更新时间:2023-12-02 04:41:06 26 4
gpt4 key购买 nike

我正在尝试使用 lapply (并希望使用 lapply 的解决方案)来重命名列表中的 data.frame 的列,但它返回名称,而不是重命名的 data.frames:

# define list
li <- list(u_n = data.frame(x = 1:3), r_l = data.frame(y = 4:6))

# trying to rename columns after the element of the list they're located in
li_2 <- lapply(1:length(li),
function(x,y) colnames(y[[x]]) <- names(y)[x], y = li)

但是,这会返回:

[[1]]
[1] "u_n"

[[2]]
[1] "r_l"

如果我使用与lapply中单独指定的函数相同的方法,它确实有效:

li[1]
$u_n
x
1 1
2 2
3 3

colnames(li[[1]]) <- names(li)[1]

li[1]
$u_n
u_n
1 1
2 2
3 3

最佳答案

我们可能需要在命名后返回该对象。

 li_2 <- lapply(seq_along(li), function(i) {
colnames(li[[i]]) <- names(li)[i]
li[[i]]})

或者可以使用setNames来完成

 li_2 <- lapply(names(li), function(x) setNames(li[[x]], x) )

或者我们可以使用 Map,它是 mapply 的包装器(它是 sapply 的多变量版本)。我们将 FUN 应用于每个输入的相应元素。

 li_2 <- Map(setNames, li, names(li))

在这里,我们将每个 list 元素的列名称更改为 list 元素的相应名称。如果我们使用匿名函数,那就是

 Map(function(x,y) setNames(x,y), li, names(li))

关于重命名列表中 Data.frame 的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32540530/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com