Вам необходимо использовать регулярное выражение . В зависимости от ваших реальных потребностей шаблон, на основе которого вам нужно извлечь значения, может измениться. Прямо сейчас я извлекаю «ячейки», которые начинаются с (^
переводит на это) varname
и *
означает, что будет дальше. Предполагая, что порядок имен переменных также правильный.
Примечание: на основе первой версии вопроса, в которой имена столбцов были varname#
.
colnames(DF1) <- subset(DF2$N2, grepl("^varname*", DF2$N2))
str(DF1)
# 'data.frame': 4 obs. of 4 variables:
# $ varnames1: Factor w/ 4 levels "A","B","C","D": 1 2 3 4
# $ varname2 : Factor w/ 4 levels "E","F","G","H": 1 2 3 4
# $ varname3 : Factor w/ 4 levels "I","J","K","L": 1 2 3 4
# $ varname4 : Factor w/ 4 levels "M","N","O","P": 1 2 3 4
Я осознаю избыточность в моем шаблоне. Просто включите *
и ^
, чтобы дать ОП немного больше понимания.
Обновление для ответа на отредактированный вопрос: Соответствующие значения в N1
для поиска имен столбцов в N2
:
Вы можете подмножество на основе значений в N1
и colnames(DF1)
:
subset(DF2, (N1 %in% colnames(DF1)))
# N1 N2
# 2 V1 var1
# 3 V2 random
# 6 Va3 nameofcolumn
# 8 column varname4
Вы можете присвоить им имена столбцов DF1
, как показано ниже (вы можете также попробовать оператор $
):
colnames(DF1) <- DF2$N2[as.numeric(rownames(subset(DF2, (N1 %in% colnames(DF1)))))]
Если сортировка была разной в двух фреймах данных, посмотрите на этот поток: Сортировка одного вектора на основе другого