2016-07-13 2 views
0

У меня есть таблицы данных. Таблица данных 1 имеет две переменные и 561 наблюдение, а таблица данных 2 имеет 563 переменных и 10 000 наблюдений. Я пытаюсь понять, как я могу наблюдение code_name переменных из данных таблицы 1, чтобы переименовать переменные в таблице данных 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' вслепую используются заменить имена в 'df2' на имена в' df1'. –

+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 
Смежные вопросы