7

我有一个没有列的数据框:

df<-data.frame(v1=c(1:10), v2=seq(1, 100, length=10))

我想将标题名称更改为“X”和“Y”

我知道我可以这样做:

names(df)<-c("X","Y")

我想做的是编写一个函数,在其中我可以将数据帧作为参数传递,并使用这些标题名称放置标题。

我试过了:

get.names<- function(x)
    {names(x)<-c("X", "Y")}

提前感谢您的帮助。

4

3 回答 3

8

您的函数设置名称;你只需要返回对象。

get.names<- function(x) {
    names(x)<-c("X", "Y")
    x
}

或者,您可以使用该setNames功能

> setNames(data.frame(v1=c(1:10), v2=seq(1, 100, length=10)), c("X","Y"))
    X   Y
1   1   1
2   2  12
3   3  23
4   4  34
5   5  45
6   6  56
7   7  67
8   8  78
9   9  89
10 10 100
于 2012-09-06T22:10:05.400 回答
6

有一个 R 函数已经这样做了,尽管它不是修改您的环境的数据框,而是返回重命名的数据框:

df<-`names<-`(df, new_names)

事实上,当你调用names(df)<-...


请注意,R 中几乎没有函数修改它们已传递的值——几乎所有函数的风格都是“功能性的”——执行对新副本的更改并返回它。出于这个原因,您应该期望看到并编写大量代码,格式如下:x=f(x).


您可能会发现另一种有用的技术是包中的rename函数reshape

df<-rename(df,c(v1="X", v2="Y"))

这只会更改指定列的名称。它还可以重命名列表和向量中的名称!

于 2012-09-06T22:12:00.283 回答
3

如果您希望使用names<-and避开内部复制df<-rename(df,c(v1="X", v2="Y"))setNames您可以使用该data.table

# some example data
library(data.table)
DF <- data.frame(a = 1:5, b = 1:5)
DT <- data.table(DF)

您可以使用data.table通过引用(无需复制)设置名称setnames

setnames(DT, new = c('new_name1','newname2'))
DT
   new_name1 newname2
1:         1        1
2:         2        2
3:         3        3
4:         4        4
5:         5        5
# you can change only a subset by defining old and new
setnames(DT, old = 'new_name1', new = 'blah')
DT
        blah newname2
1:         1        1
2:         2        2
3:         3        3
4:         4        4
5:         5        5

如果不想使用data.tables,可以使用package中的setattr函数data.table(很像package中的同名函数bit

setattr(DF, 'names', c('oh','look'))
DF

  oh look
1  1    1
2  2    2
3  3    3
4  4    4
5  5    5

 bit::setattr(DF, 'names', c('yip','hee'))
DF
  yip hee
1   1   1
2   2   2
3   3   3
4   4   4
5   5   5
于 2012-10-31T02:47:22.433 回答