Замена имени i-го столбца на имя i-1-го столбца для всего набора данных в R - PullRequest
0 голосов
/ 01 декабря 2018

Я новый пользователь RЯ пытаюсь заменить имя каждого i-го столбца именем предыдущего столбца (i-1-й) для всего набора данных.У меня есть 96 столбцов в моем наборе данных.следующий цикл for не работает.

for (i in dat[2:96]){
names(dat)[i]<-paste(names(dat)[i-1])
}

Ответы [ 3 ]

0 голосов
/ 01 декабря 2018

Для вашей задачи нет необходимости использовать цикл, вместо этого вы можете использовать векторизованный подход.В R вы всегда должны искать варианты для векторизации вашего кода, так как это более лаконично и быстрее, чем циклы.Это не означает, что циклы не очень хороши сами по себе, вы должны просто проверить, можете ли вы использовать более простой подход.

В вашем случае вы можете использовать замену имен на основе индекса, как показано ниже.

# use the R internal mtcars as exemplary data
dat = mtcars
# replace colnames by index
colnames(dat)[2:ncol(dat)] = colnames(dat)[1:(ncol(dat)-1)]
# compare the results to the original data
colnames(mtcars)
# [1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear" "carb"
colnames(dat)
# [1] "mpg"  "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear"
0 голосов
/ 01 декабря 2018

Работает без цикла и без изменения имени первого столбца.

library(rlang)
set_names(dat, nm = c(colnames(dat[1]), colnames(dat[1:95])))
0 голосов
/ 01 декабря 2018

Нет необходимости в петле.

names(dat) <- c("firstcol", names(dat)[1:95])

Это также изменяет имя первого столбца на «firstcol», чтобы избежать наличия двух столбцов с одинаковым именем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...