2014-11-21 30 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]") 

錯誤:類型'closure'的對象不是子集表。

請問我該怎麼做才能使它工作?

+0

取出報價。並且在'c(。)'中包裝表達式就表明缺乏對R語法的理解。不傷害,但不是必需的。這應該是更直接的:'name(D1)< - D2 [1:ncol(D1)]' – 2014-11-21 19:55:41

+0

如果它們是'data.table',則應該使用'setnames' – 2014-11-21 19:58:12

+0

或者使用'setNames',儘管我通常因爲'names <-'看起來更緊湊一些,所以當我將它包裝在一個列表中時,可以在函數中使用它。 – 2014-11-21 19:59:05

回答

-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 2014-11-21 20:19:33