簡體   English   中英

用於重命名 r 中的列的循環

[英]loop for renaming columns in r

我有廣泛的數據,我想轉換為渴望。 但在此之前,我想重命名所有變量列名。

我的數據框中的第一個變量是不規則的(id、名稱等),因此循環應該對除前 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

如果“varnames”是變量名稱的向量,例如

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" ...

但請注意,如果每個變量具有相同的重復次數,這才是正確的!

我建議你把你的工作分成幾個小步驟。

# 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]

希望這可以幫助!

#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))

輸出是:

  id OR_1 OR_2 FA_1 FA_2 FA_3
1  1    0    0    1    1    1
2  2    0    1    0    0    1
3  3    1    1    0    1    0
4  4    1    1    0    0    1

簡單案例場景如果您有兩個數據框或 csv,它們的列數相同但名稱不同,您需要重命名它們以進行合並。

然后

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

在哪里,
df1具有您想要在df2 中使用的列名。
ncol返回該特定數據框中的列數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM