根据R中的行命名变量

时间:2016-07-13 02:51:39

标签: r

我必须要数据表。数据表1有两个变量和561个观测值,而数据表2有563个变量和10,000个观测值。我试图弄清楚如何从数据表1中观察code_name变量来重命名数据表2中的变量。

我有什么:

数据表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

变量的新名称是数字,因为它们是结构而不是标签。

2 个答案:

答案 0 :(得分:3)

我们可以使用names函数根据行

命名变量
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

答案 1 :(得分:1)

我们可以使用grep来查找以&#34; V&#34;开头的第二个数据集中的列名索引。然后是数字,并将其更改为第一个数据集中的第二列值。

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