通过转换重新编码数据帧 table

Recoding dataframe by transformation table

我有一个包含 3 列的数据框。其中一列(项目)包含可能重复的长字符串(有些包含特殊字符,例如分号;为简单起见,此处将其写为 Tx)。我想找到特定列的所有唯一值。按照以下格式为每个唯一值创建昵称:OV1、OV2、... OVn。我想保留这个 table 并称它为 'transformation table'。 在下一步中,我想转到源 table 并使用转换 table.

中的值重新编码每个值

这是来源的示例 table:

    items  sequenceID        eventID SIZE  
1:   T1      41595370             1    1
2:   T2      41595371             1    1
3:   T3      41595282             1    1
4:   T3      41595282             2    1
5:   T4      41595373             1    1
6:   T5      41595368             1    1
7:   T1      41595379             1    1

结果 table 将是:

     items     sequenceID      eventID SIZE  
1:   OV1       41595370             1    1
2:   OV2       41595371             1    1
3:   OV3       41595282             1    1
4:   OV3       41595282             2    1
5:   OV4       41595373             1    1
6:   OV5       41595368             1    1
7:   OV1       41595379             1    1

转换 table 将是:

1:   T1    OV1
2:   T2    OV2
3:   T3    OV3
4:   T4    OV4
5:   T5    OV5

源数据在data6(数据帧)中。 我使用了以下命令:

u1 <- unique(data6$items)
u1 <- data.frame(u1)
ov <- c(paste("ov",1:nrow(u1),sep=""))

我现在要用 OV 值替换 u1 中的所有唯一项目列,并将其创建为转换 table。之后替换 data6$items.

中的所有值

非常感谢您的帮助。

您可以通过以下方式创建转换 table:

u1 <- as.data.frame(unique(data6$items))
names(u1) <- "items"
u1$newitem <- paste0("OV", substr(u1$items,2,4))

这给出:

> u1
  items newitem
1    T1     OV1
2    T2     OV2
3    T3     OV3
4    T4     OV4
5    T5     OV5

您现在可以将源 table 中的相关项目替换为:

data6$items = u1$newitem[match(data6$items,u1$items)]

这给出:

> data6
  items sequenceID eventID SIZE
1   OV1   41595370       1    1
2   OV2   41595371       1    1
3   OV3   41595282       1    1
4   OV3   41595282       2    1
5   OV4   41595373       1    1
6   OV5   41595368       1    1
7   OV1   41595379       1    1

如果您只想将 T 更改为 OV,您也可以这样做:

data6$items <- gsub("T", "OV", data6$items)

看起来您的 "item" 可以被视为需要新标签的因子变量。如果是这样,您可以避免转换 table 并在源数据框中重新编码 "item":

data6$items = factor(data6$items, labels=paste0("OV", 1:length(unique(data6$items))))