2016-07-13 77 views
0

我必須要有數據表。數據表1有兩個變量和561個觀測值,而數據表2有563個變量和10,000個觀測值。我想弄清楚,我從數據表1 code_name變量的意見如何重命名數據表變量2.根據R中的行命名變量

我有什麼:

數據表1

code code_name 
11  rasf 
04  iadf 
27  pqwr 
09  pklf 
86  irmw 
30  pwql 

數據表2

activity subject  V1  V2  V3  V4 V5  V6 
    5   2  0.29 0.19 5.3  1.8 8.3 0.3 
    9   7  0.11 0.10 7.8  2.0 0.5 0.9 
    9   7  0.19 1.10 8.0  1.9 0.4 0.7 

我需要什麼:

activity subject rasf iadf pqwr pklf irmw pwql 
    5   2  0.29 0.19 5.3  1.8 8.3 0.3 
    9   7  0.11 0.10 7.8  2.0 0.5 0.9 
    9   7  0.19 1.10 8.0  1.9 0.4 0.7 

我所做的:

#Extracts all rows and just column two from the data table 1 

new_data_table1 <- data_table1[,2] 

#Set names on data table 2 to build the final data 

final_data <- setnames(data_table2, names(data_table2), c("activity", "subject", new_data_table1)) 

我的代碼的問題是,當我從數據表1中提取的所有行它給出了一個長長的清單,表現爲結構和標籤矢量數據。正因爲如此,當我運行我的代碼,我得到這個表:

activity subject  243  244  245  246 247 248 
    5   2  0.29 0.19 5.3  1.8 8.3 0.3 
    9   7  0.11 0.10 7.8  2.0 0.5 0.9 
    9   7  0.19 1.10 8.0  1.9 0.4 0.7 

爲變量的新名稱是數字,因爲它們是結構,而不是標籤。

回答

1

我們可以使用grep找到第二個數據集中以「V」開頭的列名索引,後面跟着數字,並將其更改爲第一個數據集的第二列值。

names(df2)[grep("^V\\d+", names(df2))] <- as.character(df1[,2]) 
+0

使用的名稱函數變量命名這個答案可能是由'是盲目使用grep'返回的風險指數用'df1'中的替換'df2'中的名字。 –

+0

@TimBiegeleisen我想OP的列是按順序排列的。假設兩個數據集中元素的數量相同,那麼即使中間還有其他列,'grep'也會給出'df2'中列的索引。但是,這裏的假設是'V'列的編號是遞增的。 – akrun

+1

沒錯!我的數據集的「V」列按順序編號。 – Rods2292

3

我們可以根據行

names(df1)[3:length(df1)] <- df$code_name 


df1 
    activity subject rasf iadf pqwr pklf irmw pwql 
1  5  2 0.29 0.19 5.3 1.8 8.3 0.3 
2  9  7 0.11 0.10 7.8 2.0 0.5 0.9 
3  9  7 0.19 1.10 8.0 1.9 0.4 0.7 

數據

df 
    code code_name 
1 11  rasf 
2 4  iadf 
3 27  pqwr 
4 9  pklf 
5 86  irmw 
6 30  pwql 


df1 
    activity subject V1 V2 V3 V4 V5 V6 
1  5  2 0.29 0.19 5.3 1.8 8.3 0.3 
2  9  7 0.11 0.10 7.8 2.0 0.5 0.9 
3  9  7 0.19 1.10 8.0 1.9 0.4 0.7