根据与另一个数据框的匹配来更改列名

时间:2018-07-03 16:57:03

标签: r data-analysis

我有一个具有受试者特征的df(foo),然后是一些基因组数据(如果重要的话,以酶促委员会编号或EC的形式)。

sample  ca_avg  id  age 1.1.1.1     1.1.1.100   1.1.1.12
124-5   1003    124 80  0           0.0001      0.654

我想将酶的佣金编号更改为实际名称。我将.txt导入到df(enames)中,该df拥有转换ECs->名称的文件,而ECs比foo中的文件多。

ec_num      1.1.1.1 1.1.1.100   1.1.1.102   1.1.1.103   1.1.1.108
ec_name     adh     oacp        3dr         lt3h        c3d

我想用ec_name(如果可用)替换foo的列名,否则,像这样单独留下名称:

sample  ca_avg  id  age adh oacp    1.1.1.12
124-5   1003    124 80  0   0.0001  0.654

我尝试做的第一件事是找到数据框之间的交集:

common_col <- intersect(colnames(foo), colnames(enames))

然后我尝试进行

的许多迭代

if (colnames(foo) %in% common_col){ colnames(foo) <- colnames(enames)}

但是它不起作用。

此后我为条件重命名所做的任何尝试都失败了。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

这应该有帮助:

# example datasets
foo = data.frame(x=1,
                 y=2,
                 z=3)

enames = data.frame(y = "YY",
                    z = "ZZ", stringsAsFactors = F)

# see foo
foo

#   x y z
# 1 1 2 3

# keep common column names
common_col = intersect(names(foo), names(enames))

# replace common column names in foo with corresponding values from enames
names(foo)[names(foo) %in% common_col] = enames[common_col]

# check foo again
foo

#   x YY ZZ
# 1 1  2  3

如果您愿意,也可以使用colnames代替names