将列名分配给数据框列表

9
我有一个数据框列表,其中的列有命名。
如果我想要更改列表中数据框的名称(而不是更改父列表的名称),我无法直接通过names()或colnames()访问它们,而必须使用lapply()获取名称。
但是,如果我使用lapply返回列名称,则它们仅存在于lapply调用中,并且我无法在父环境中为列表分配新名称。
以下是一个MWE:
1/ 创建对象
require(xts)
data(sample_matrix)
x <- as.xts(sample_matrix)
y <- lapply(split(x, "months"), data.frame)

2/ 数据框的列名不太容易直接访问

names(y)

空值

colnames(y)

NULL

3/ 我们可以尝试使用lapply函数

lapply(y, function(z) names(z) <- c('Op', 'Hi', 'Lo', 'Clo'))

[[1]]

[1] "Op" "Hi" "Lo" "Clo" ...

但实际上它并没有给对象分配名称。

1个回答

17

您可以使用setNames函数来...

lapply( y , setNames , nm = c('Op', 'Hi', 'Lo', 'Clo') )
#[[1]]
#                 Op       Hi       Lo      Clo
#2007-01-02 50.03978 50.11778 49.95041 50.11778
#2007-01-03 50.23050 50.42188 50.23050 50.39767
#2007-01-04 50.42096 50.42096 50.26414 50.33236
#       ...      ...      ...      ...      ...

直接引用自帮助页面:

这是一个方便的函数,用于设置对象的名称并返回对象。它在函数定义的结尾最有用,当你正在创建要返回的对象,并且不想将其存储在名称下以便可以分配名称时。


2
不错,我以前从没见过那个函数。 - lilster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接