一次更改R组中的数据框列名称

时间:2017-08-24 23:34:04

标签: r dataframe

假设我有一个如下所示的数据框(DF):

test <- c('Test1','Test2','Test3')
col.DF.names < c('ID', 'year', 'car', 'age', 'year.1', 'car.1', 'age.1', 'year.2', 'car.2', 'age.2')

ID <- c('A','B','C')

year <- c(2001,2002,2003)
car <- c('acura','benz','lexus')
age <- c(55,16,20)

year.1 <- c(2011,2012,2013)
car.1 <- c('honda','gm','bmw')
age.1 <- c(43,21,34)

year.2 <- c(1961,1962,1963)
car.2 <- c('toyota','porsche','jeep')
age.2 <- c(33,56,42)

DF <- data.frame(ID, year, car, age, year.1, car.1, age.1, year.2, car.2, age.2)

我需要数据框的列丢失&#34;。#&#34;而在它前面有Test#,所以它看起来像这样:

ID   Test1.year   Test1.car   Test1.age   Test2.year   Test2.car   Test2.age  Test3.year  Test3.car  Test3.age
.... with all the data 

是否有人有建议?基本上,从第二列开始,我想添加3列的测试[1]名称,然后转到下一组三列并添加测试[2]等等..

我知道如何硬编码:

colnames(DF)[2:4] <- paste(test[1], colnames(DF)[2:4], sep = ".")

但这是一个玩具套装,我想稍微自动化一下,所以我并没有特别指出[2:4]。

1 个答案:

答案 0 :(得分:1)

你可以尝试:

colnames(DF)[-1] <- paste(sapply(test, rep, 3), colnames(DF)[-1], sep = ".")

或者以下可能更好:

colnames(DF)[-1] <- paste(sapply(test, rep, 3), colnames(DF)[2:4], sep = ".")

或:

colnames(DF)[-1] <- paste(rep(test, each=3), colnames(DF)[2:4], sep = ".")

感谢@thelatemail