为大型列表中的索引元素指定名称 - R.

时间:2018-02-21 20:47:54

标签: r dataframe rename

是否可以重命名列表元素列表?

例如:

fast <- subset.data.frame(mtcars, mtcars$hp > 250)
medium <- subset.data.frame(mtcars, mtcars$hp >200 & mtcars$hp < 300)
slow <- subset.data.frame(mtcars, mtcars$hp < 80)
mycars <- list(fast, medium, slow)

提供List of 3

mycars

[[1]]
                mpg cyl disp  hp drat   wt qsec vs am gear carb
Ford Pantera L 15.8   8  351 264 4.22 3.17 14.5  0  1    5    4
Maserati Bora  15.0   8  301 335 3.54 3.57 14.6  0  1    5    8

[[2]]
                     mpg cyl disp  hp drat    wt  qsec vs am gear carb
Duster 360          14.3   8  360 245 3.21 3.570 15.84  0  0    3    4
Cadillac Fleetwood  10.4   8  472 205 2.93 5.250 17.98  0  0    3    4
Lincoln Continental 10.4   8  460 215 3.00 5.424 17.82  0  0    3    4
Chrysler Imperial   14.7   8  440 230 3.23 5.345 17.42  0  0    3    4
Camaro Z28          13.3   8  350 245 3.73 3.840 15.41  0  0    3    4
Ford Pantera L      15.8   8  351 264 4.22 3.170 14.50  0  1    5    4

[[3]]
                mpg cyl  disp hp drat    wt  qsec vs am gear carb
Merc 240D      24.4   4 146.7 62 3.69 3.190 20.00  1  0    4    2
Fiat 128       32.4   4  78.7 66 4.08 2.200 19.47  1  1    4    1
Honda Civic    30.4   4  75.7 52 4.93 1.615 18.52  1  1    4    2
Toyota Corolla 33.9   4  71.1 65 4.22 1.835 19.90  1  1    4    1
Fiat X1-9      27.3   4  79.0 66 4.08 1.935 18.90  1  1    4    1

但我想将索引[[1]] [[2]] [[3]]重命名为[[fast]] [[medium]] [[slow]],或者首选保留索引,并将列表的各个名称添加为附加描述符。类似于:[[1]]"Fast"

滚动浏览stackoverflow,类似的问题建议使用names重命名,但names(mycars)返回NULL。

names(mycars[[1]]) 
[1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear" "carb"

但我对更改列名不感兴趣。

这有效:

 mycars <- list(fast = fast, medium = medium, slow = slow)

但是,我的实际数据集更复杂,我希望能够在创建列表后重命名元素

2 个答案:

答案 0 :(得分:1)

mycars <- setNames(mycars,c("fast","medium","slow"))

你仍然可以使用索引:

mycars[[1]]
mycars[["fast"]]

names(mycars[[1]])会返回mycars[[1]]的列名。

可能违反直觉的一件事是,R中的列表具有与列数相同长度的可选names属性,但列项目没有名称附在他们身上(没有单一的name属性)。

当您致电mycars[[1]]时,您丢失了姓名。如果您调用mycars[1]但是只获得一个元素的列表,并且此列表可以具有长度为1的names属性。

答案 1 :(得分:0)

您可以使用函数名称添加名称,例如:

names(data)[1:2] <- c("january", "february")