我有一个没有列的数据框:
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")}
提前感谢您的帮助。
您的函数设置名称;你只需要返回对象。
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
有一个 R 函数已经这样做了,尽管它不是修改您的环境的数据框,而是返回重命名的数据框:
df<-`names<-`(df, new_names)
事实上,当你调用names(df)<-
...
请注意,R 中几乎没有函数修改它们已传递的值——几乎所有函数的风格都是“功能性的”——执行对新副本的更改并返回它。出于这个原因,您应该期望看到并编写大量代码,格式如下:x=f(x)
.
您可能会发现另一种有用的技术是包中的rename
函数reshape
:
df<-rename(df,c(v1="X", v2="Y"))
这只会更改指定列的名称。它还可以重命名列表和向量中的名称!
如果您希望使用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