我对基础包中的colnames
函数有疑问
假设您有一个data.frame,如下所示:
df <- data.frame(variable = letters[1:100], value = rnorm(100))
正如人们所料,colnames(df[1])
会返回:
colnames(df[1])
# [1] "variable"
但是,调用特定列
时似乎无法进行分配colnames(df[1]) <- c("test")
colnames(df[1])
# [1] "variable"
为什么?
答案 0 :(得分:7)
因为你应该这样做:
> colnames(df)[1] <- "test"
> colnames(df)[1]
[1] "test"
colnames函数返回一个可以改变的字符向量。
答案 1 :(得分:4)
您的版本没有按预期执行的原因是df[1]
在内存中创建临时数据框,然后colnames函数更改此临时数据框中的1列的名称(而不是原始数据框) ),但是暂时的df没有其他任何事情,所以它被静默地丢弃。您的原始数据框从未被触及过,因此下次执行colnames(df[1])
时,会创建一个新的临时df,从未修改的原始文件中复制并返回该名称。
更改调用colnames
和子集的顺序会按照其他答案显示您想要的内容。
答案 2 :(得分:3)
通过索引调用数据帧(整个数据帧)上的 colnames()函数然后访问,该函数调用返回的1D向量项:
> data(Orange)
> Orange[1:5,]
Tree age circumference
1 1 118 30
2 1 484 58
3 1 664 87
4 1 1004 115
5 1 1231 120
> call *colnames* on the Orange dataframe and bind it to the variable *cn*
> cn = colnames(Orange)
> cn
[1] "Tree" "age" "circumference"
> length(cn)
[1] 3
> class(cn)
[1] "character"
> # access the items of this 1D character vector by index:
> cn[1]
[1] "Tree"
> cn[3]
[1] "circumference"
> # likewise modify any item the same way:
> cn[3] = '2*pi*r'