Changing column names of a data frame
我有一个名为"newprice"的数据框(见下文),我想在R中改变程序中的列名。
1 2 3 4 5 | > newprice Chang. Chang. Chang. 1 100 36 136 2 120 -33 87 3 150 14 164 |
事实上,这正在做什么:
1 2 3 | names(newprice)[1]<-paste("premium") names(newprice)[2]<-paste("change") names(newprice)[3]<-paste("newprice") |
我没有将它放在循环中,因为我希望每个列名称与您看到的不同。
当我将程序粘贴到R控制台时,这是它给我的输出:
1 2 3 4 5 6 | > names(newprice)[1]<-paste("premium") Error: unexpected input in"names(newprice)[1]<-paste("" > names(newprice)[2]<-paste("change") Error: unexpected input in"names(newprice)[2]<-paste("" > names(newprice)[3]<-paste("newpremium") Error: unexpected input in"names(newprice)[3]<-paste("" |
我同样尝试使用
有人可以帮我解决这个问题吗?
使用
1 2 3 4 5 6 7 8 9 10 11 12 | R> X <- data.frame(bad=1:3, worse=rnorm(3)) R> X bad worse 1 1 -2.440467 2 2 1.320113 3 3 -0.306639 R> colnames(X) <- c("good","better") R> X good better 1 1 -2.440467 2 2 1.320113 3 3 -0.306639 |
你也可以分组:
1 | R> colnames(X)[2] <-"superduper" |
我用这个:
1 | colnames(dataframe)[which(names(dataframe) =="columnName")] <-"newColumnName" |
该错误是由"智能引号"(或称为它们)引起的。这里的教训是,"不要在'编辑器'中编写代码,将引号转换为智能引号"。
1 2 | names(newprice)[1]<-paste("premium") # error names(newprice)[1]<-paste("premium") # works |
此外,您不需要
你试过了吗:
?
新建议的方法是使用
1 | data_frame <- setNames(data_frame, c("premium","change","newprice")) |
如果您以早期答案建议的某些方式使用
如果这是
1 | setnames(data_table,"old-name","new-name") |
我有同样的问题,这段代码为我解决了。
1 | names(data)[names(data) =="oldVariableName"] <-"newVariableName" |
简而言之,此代码执行以下操作:
与其他人类似:
1 2 | cols <- c("premium","change","newprice") colnames(dataframe) <- cols |
非常简单易于修改。
如果只知道旧列名称,则需要一次重命名除多列之外的所有列,可以使用
1 2 3 4 5 6 | df = data.frame(bad=1:3, worse=rnorm(3), worst=LETTERS[1:3]) bad worse worst 1 1 -0.77915455 A 2 2 0.06717385 B 3 3 -0.02827242 C |
现在你想把"坏"和"最坏"改为"好"和"最好"。您可以使用
1 | colnames(df)[which(colnames(df) %in% c("bad","worst") )] <- c("good","best") |
这导致了
1 2 3 4 | good worse best 1 1 -0.6010363 A 2 2 0.7336155 B 3 3 0.9435469 C |
尝试:
1 | names(newprice) <- c("premium","change","newprice") |
您可以通过以下方式进行编辑:
1 | newprice <- edit(newprice) |
并手动更改列名称。
我的专栏名称如下
1 2 | colnames(t) [1]"Class" "Sex" "Age" "Survived""Freq" |
我想更改Class和Sex的列名
1 | colnames(t)=c("STD","Gender","AGE","SURVIVED","FREQ") |
只是为了纠正并略微扩展Scott Wilson的答案。
您也可以在data.frames上使用data.table的
不要指望操作加速,但是你可以期望
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | library(data.table) set.seed(123) n = 1e8 df = data.frame(bad=sample(1:3, n, TRUE), worse=rnorm(n)) address(df) #[1]"0x208f9f00" colnames(df) <- c("good","better") address(df) #[1]"0x208fa1d8" rm(df) dt = data.table(bad=sample(1:3, n, TRUE), worse=rnorm(n)) address(dt) #[1]"0x535c830" setnames(dt, c("good","better")) address(dt) #[1]"0x535c830" rm(dt) |
因此,如果你达到内存限制,你可以考虑使用这个。
1 2 3 4 5 6 7 8 9 10 | library(dplyr) mtcars %>% tibble::rownames_to_column('car_model') %>% # convert rowname to a column. tibble must be installed. select(car_model, est_mpg = mpg, horse_power = hp, everything()) %>% # rename specific columns and reorder rename(weight = wt, cylinders = cyl) %>% # another option for renaming specific columns that keeps everything by default head(2) car_model est_mpg horse_power cylinders disp drat weight qsec vs am gear carb 1 Mazda RX4 21 110 6 160 3.9 2.620 16.46 0 1 4 4 2 Mazda RX4 Wag 21 110 6 160 3.9 2.875 17.02 0 1 4 4 |
对于所有列名称,还有三个范围的
1 2 3 4 5 6 7 | iris %>% rename_all(~gsub("\\s+|\\.","_", .)) %>% rename_all(tolower) %>% head(2) sepal_length sepal_width petal_length petal_width species 1 5.1 3.5 1.4 0.2 setosa 2 4.9 3.0 1.4 0.2 setosa |
1 2 3 4 5 6 7 | iris %>% select_all(~gsub("\\s+|\\.","_", .)) %>% select_all(tolower) %>% head(2) sepal_length sepal_width petal_length petal_width species 1 5.1 3.5 1.4 0.2 setosa 2 4.9 3.0 1.4 0.2 setosa |
这可能会有所帮助:
1 2 3 4 5 6 7 8 9 10 11 12 | rename.columns=function(df,changelist){ #renames columns of a dataframe for(i in 1:length(names(df))){ if(length(changelist[[names(df)[i]]])>0){ names(df)[i]= changelist[[names(df)[i]]] } } df } # Specify new dataframe df=rename.columns(df,list(old.column='new.column.name')) |
使用此选项可以通过colname函数更改列名称。
1 2 3 | colnames(newprice)[1] ="premium" colnames(newprice)[2] ="change" colnames(newprice)[3] ="newprice" |
如果我们有2个数据帧,则以下工作
1 2 | DF1<-data.frame('a', 'b') DF2<-data.frame('c','d') |
我们更改DF1的名称如下
1 | colnames(DF1)<- colnames(DF2) |