假设我有一个如下所示的数据框(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]。
答案 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