2014-11-21 2 views
-5

У меня есть две таблицы данных, D1 и D2. D1 - 20 на 181, а D2 - на 181 на 1. Я хочу изменить имя столбцов D1 на значения в D2. Я использую следующий код, но я получаю сообщение об ошибке:Именование столбцов в таблице данных в R

for(i in 1 : ncol(D1)){ names(D1)[i] <- c("D2[i,1]") 

Ошибка: объект типа «закрытия» не subsettable.

Не могли бы вы рассказать мне, что мне делать, чтобы заставить его работать?

+0

Вынуть кавычки. И обертывание выражения в 'c (.)' Просто показывает отсутствие понимания синтаксиса R. Не больно, но не нужно. Это было бы более прямым: 'names (D1) <- D2 [1: ncol (D1)]' –

+0

Вы должны использовать 'setnames', если они' data.table ' –

+0

Или используйте' setNames', хотя я обычно используйте его в функции, когда я обматываю его вокруг возвращаемого списка, так как 'names <-' кажется немного более компактным. –

ответ

-1

Я не говорю с таблицами данных, но это решение, которое будет работать для фреймов данных и, надо надеяться, обобщить. Стратегия состоит в том, чтобы использовать тот факт, что вы можете заполнить один вектор другим вектором, не имея при этом необходимости использовать цикл.

# make the example data sets 
D1 <- as.data.frame(matrix(data=(1:(20*181)), nrow=20, ncol=181)) 
D2 <- data.frame(name=paste0("Name_",(1:181))) 

# make a copy of D1 
D1_named <- D1 

# the vector of D1 names is replaced by the value in D2 
# (both vectors must be of the same length) 
names(D1_named) <- D2$name 
+0

Это не работает для таблицы данных. Я изменил таблицы на фрейм данных. – user3439050

Смежные вопросы