用于重命名r

时间:2018-02-22 08:26:30

标签: r loops for-loop rename

我有广泛的数据,我想转换为渴望。但在此之前,我想重命名所有变量列名。

我的数据框中的第一个变量是anagraphical(id,names等),因此循环应该对除前9个以外的所有列运行。

此外,由于数据范围很广,我在代表不同年份(10年)的列中重复了变量(应该有相同的前缀)。

我在考虑这样的事情:

for (i in seq(10:440)){
  names(mydata)[i:i+10]<- paste("varname", 1:10, sep="_")
}

显然,它不起作用。但我需要这样的东西,“varname”也随i而变化(我需要重新编码大约45个重复10年的变量)。

我希望已经清楚了。

感谢任何人的帮助!!!!!

我的数据看起来像这样

id Operating_renvenue_last_yr Operating_renvenue_-1 Operating_renvenue-2 ... Fixed_assets_last_yr Fixed_assets-1 Fixed_assets-_2 
ESA08005449 1973859 1983692 2028124 ... 205824 205955 208695
ESA08000820 1044971 962639 912788 ... 100355 120558 135448
ESA17000852 1005575 1035578 1055304 ... 509555 520687 705777
ESA08800450 861971 812596 765714 ... 1120587 1130458 1145200

我想获得:

id            OR_1    OR_2     OR_3 ... FA_1    FA_2   FA_3 
ESA08005449 1973859 1983692 2028124 ... 205824 205955 208695
ESA08000820 1044971 962639 912788 ... 100355 120558 135448
ESA17000852 1005575 1035578 1055304 ... 509555 520687 705777
ESA08800450 861971 812596 765714 ... 1120587 1130458 1145200

4 个答案:

答案 0 :(得分:1)

如果&#34; varnames&#34;是变量名的向量,如

varnames<-c("OR", "FA", ..)

你可能只是运行

names(mydata)[10:ncol(mydata)]<- paste0(rep(varnames, each=10), "_",1:10)

给你

names(mydata)[10:ncol(mydata)]

 "OR_1"  "OR_2"  "OR_3"  "OR_4"  "OR_5"  "OR_6"  "OR_7"  "OR_8"  "OR_9"  "OR_10" "FA_1"  "FA_2"  "FA_3"  "FA_4"  "FA_5"  "FA_6"  "FA_7"  "FA_8" 
 "FA_9"  "FA_10" ...

但请注意,只有每个变量具有相同的重复次数,这才是正确的!

答案 1 :(得分:0)

我建议你小步分工。

# Make a copy mydata column names
newnames <- names(mydata)

# Build input data
mydata <- data.frame(a=1,b=2,c=3,d=4,e=5,e=6,e=7,e=8,f=9)
for (i in seq(10:440)) mydata[[i]] <- 10

# A vector of variable names for the sake of the example
varnames <- paste('var', 1:45)

# Set new variable names
newnames[10:length(newnames)] <- paste(rep(varnames, each = 10)[1:(length(newnames)-9)], 1:10, sep = '_')

# Commit your changes
names(mydata) <- newnames

# Result
names(mydata)[1:20]

答案 2 :(得分:0)

希望这有帮助!

test():
  pushq %rbp
  movq %rsp, %rbp
  nop
  popq %rbp
  ret
main:
  pushq %rbp
  movq %rsp, %rbp
  movl $10, -4(%rbp) // space is created for zz on stack
  movl $0, %eax
  popq %rbp
  ret

输出是:

#sample data
set.seed(1)
df <- data.frame(id=1:4, replicate(5,sample(0:1,4,rep=TRUE)))

#define a list of varying "varname"
varname <- c('OR', 'FA')
#define how many times above "varname" repeat itself
n <- c(2, 3) #let's say that 'OR' repeats 2 times and 'FA' 3 times

#replace column name
names(df)[2:ncol(df)] <- unlist(mapply(function(x,y) paste(x, seq(1,y), sep="_"), varname, n))

答案 3 :(得分:0)

简单案例场景 如果您有两个列数相同但名称不同的数据框或 csv,并且您需要重命名它们以进行合并。

然后

names(df2)[1:ncol(df2)] <- paste0(names(df1)[1:ncol(df1)])

哪里,
df1 具有您希望在 df2 中具有的列名称。
ncol 返回特定数据框中的列数